方法一:直接关闭异常,不检查跨线程调用
private void Form1_Load(object sender
, EventArgs e
)
{
Control
.CheckForIllegalCrossThreadCalls
= false;
Thread thread
= new Thread(ThreadFuntion
);
thread
.IsBackground
= true;
thread
.Start();
}
方法二:利用委托
举例1、
delegate void TaskType( string szText
);
void TheradTask( object szText
)
{
if( InvokeRequired
== false ) {
textBox1
.Text
= (string)szText
;
return;
}
TaskType task
= new TaskType( ThreadTask
);
Invoke( task
, new object[] { szText
} );
}
void button1_Click( object sender
, EventArgs e
)
{
Thread thread
= new Thread( new ParameterizedThreadStart( ThreadTask
) );
thread
.Start( "test" );
}
举例2,已经开线程了,所以传入的参数类型不用是object类型
delegate void TaskType( string szMessage
, string szName
);
void chatAcceptSocket_ShowMessageEvent( string szMessage
, string szName
)
{
if( InvokeRequired
== false ) {
string szShowMessage
= "a";
txtHistoryMessage
.Text
+= szShowMessage
;
return;
}
TaskType task
= new TaskType( chatAcceptSocket_ShowMessageEvent
);
Invoke( task
, new object[] { szMessage
, szName
} );
}
更多可以参考: https://www.cnblogs.com/darksoulson/p/3428577.html https://www.cnblogs.com/zhaotiantang/archive/2009/03/17/1414135.html