在主线程中,我创建了一个工作线程,用于创建新表单并调用form.showDialog
。在调用form.Close
之后,应用程序就会死亡。
为什么会这样?
//called from someone worker thread. not from main thread
void s_notificationAgent_AgentError(object sender, EventArgs e)
{
try
{
ConnectingForm form = new ConnectionForm();
form.ShowDialog();//if i close form clicking on button. app dies(
}
catch(Exception ex)
{
}
}
UPD:因为我没有权利回答这个问题
我在'编辑'中回答了问题:)
谷歌搜索后我发现..
原因是您在创建它的线程以外的线程上访问Application对象。解决方案是在创建Application对象(或所有者)的线程上调用方法。
它帮助了我:)。
//called from someone worker thread. not from main thread
void s_notificationAgent_AgentError(object sender, EventArgs e)
{
//through the synchContext calling methods from GUI thread
winContext.Send(_=> {form = new Form1();},null);
winContext.Send(_=> form.ShowDialog(),null);
}
答案 0 :(得分:1)
所有UI代码都在一个线程上运行。一旦该线程结束,应用程序结束,消息泵被拆除,等等。
在您的工作线程中,您需要创建一个新的应用程序并在其上运行,就像您的程序在启动时一样(通常会为您生成此代码)。查看program.cs以查看生成的代码,并将其复制并粘贴到工作线程中。
这样的事情:
System.Windows.Forms.Application.Run(new MyDialogInTheWorkerThread());