Control.Invoke 方法 (Delegate) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。
Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。
以下为实际应用中碰到的问题,在主线程中启动一个线程,然后在这个线程中启动 serviceForm,然
而在线程启动后,往 serviceForm 发送指令,serviceForm.IsHandleCreated 老是报 serviceForm =
null,无法执行指令,采用延时的办法可以解决此问题,但不是高效的办法,后来在 serviceForm.Load
+= new EventHandler(serviceForm_Load);serviceForm_Load 事件中添加指令,发送成功。主要
原因还是多线程所致。
SatirServiceForm serviceForm;
Thread serviceFormThread;
protected void Init()
{
serviceFormThread = new Thread(MainFormMessageThread);
serviceFormThread.Name = "ServiceThread";
serviceFormThread.Start();
}
protected void MainFormMessageThread()
{
if (serviceForm == null)
{
serviceForm = new SatirServiceForm();
serviceForm.Load += new EventHandler(serviceForm_Load);
//serviceForm.RecvedCmd += new EventHandler(OnServiceRecvedCmd);
}
Application.Run(serviceForm);
}
void serviceForm_Load(object sender, EventArgs e)
{
SendCommand(InfraOnlineCmd.Start, 0);