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();
}