首页 > 代码库 > 线程间操作无效: 从不是创建控件的线程访问它.

线程间操作无效: 从不是创建控件的线程访问它.

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Linq;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 using System.Threading;
10 
11 namespace LoginIn
12 {
13     public partial class Form1 : Form
14     {
15         delegate void MyDelegate(string name, string code);
16         delegate void SetTipDelegate(string tip);
17         public Form1()
18         {
19             InitializeComponent();
20         }
21 
22         private void button1_Click(object sender, EventArgs e)
23         {
24             string name = txtName.Text;
25             string code = txtCode.Text;
26             //调用委托,用新线程校验用户名、密码
27             MyDelegate myDelegate = new MyDelegate(CheckUser);
28             myDelegate.BeginInvoke(name, code, null, null);
29         }
30 
31         void CheckUser(string name, string code)
32         {
33             Thread.Sleep(2000);
34             if (name == "1" && code == "1")
35             {
36                 SetTip("成功");
37             }
38             else
39             {
40                 SetTip("失败");
41             }
42         }
43 
44         void SetTip(string tip)
45         {
46             //是否调用Invoke方法
47             if (lbTip.InvokeRequired)
48             //if(!从创建控件“lbTip”的线程访问它)
49             {
50                 //调用委托
51                 SetTipDelegate myDelegate = new SetTipDelegate(SetTip);
52                 Invoke(myDelegate, tip);
53             }
54             else
55             {
56                 lbTip.Text = tip;
57             }
58         }
59 
60         private void timer1_Tick(object sender, EventArgs e)
61         {
62             button1.Text = DateTime.Now.ToString();
63         }
64     }
65 }