本文共 1385 字,大约阅读时间需要 4 分钟。
1、在Form Load事件中加入
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 是最简单的方式!2、创建代理delegate void SetTextCallback(string text);
创建和启动线程this.demoThread = new Thread(new ThreadStart(this.ThreadProcUnsafe)); this.demoThread.Start();线程中要求改主窗体UI中的text属性private void ThreadProcSafe() { this.SetText("This text was set safely."); }调用窗体中的函数用invoke传递参数private void SetText(string text) { if (this.textBox1.InvokeRequired) { SetTextCallback d = new SetTextCallback(SetText); this.Invoke(d, new object[] { text }); } else { this.textBox1.Text = text; }}
3、{
1.定义 委托
delegate void myDelegate(int i); myDelegate mydelegate = null; 2.定义方法,显示消息public void ShowMessage(int i) { this.textBox1.Text = i.ToString(); this.progressBar1.Value = i; } 3.定义方法,驱动消息public void MyEvent() { for (int i = 0; i < 100; i++) { Thread.Sleep(100); this.BeginInvoke(mydelegate, new object[] {i}); } } 4: 运行 private void button1_Click(object sender, EventArgs e) { mydelegate = new myDelegate(ShowMessage); Thread myThread = new Thread(MyEvent); //IsBackground 是否后台 //这个属性很重要 .如果 Thread IsBackground 等于false // 当线程还没有结束时,你点了关闭按钮 // 将抛出An unhandled exception //of type 'System.InvalidOperationException' //occurred in System.Windows.Forms.dll 异常 myThread.IsBackground = true; myThread.Start(); } }