[英]In a STA thread: Form.Hide() = BackgroundWorker event not firing?
我想在backgroundworker工作时隐藏主窗口,但是当我在this.Hide()
之前将主窗体设置为this.Hide()
backgroundworker.RunWorkerAsync()
, ProgressChanged
和RunWorkerCompleted
均不会触发。 我该如何实现? 谢谢。
更多代码: ProgressChanged
和RunWorkerCompleted
以下命令触发:
private void button1_Click(object sender, EventArgs e)
{
backgroundworker.RunWorkerAsync();
}
ProgressChanged
和RunWorkerCompleted
不适用于以下情况:
private void button1_Click(object sender, EventArgs e)
{
this.Hide();
backgroundworker.RunWorkerAsync();
}
抱歉:更多信息:该窗体用于共享(COM)Outlook加载项。
在Outlook中有一个按钮,单击此按钮可以加载表单,当我在这样的新线程中显示表单时会发生问题:
private void MyButton_Click(CommandBarButton cmdBarbutton, ref bool cancel)
{
System.Threading.Thread tt = new System.Threading.Thread(new System.Threading.ThreadStart(showwindow));
tt.SetApartmentState(System.Threading.ApartmentState.STA);
tt.Start();
}
private void showwindow()
{
GUIForm = new MyForm();
GUIForm.ShowDialog();
}
如果我只是加载表格,没问题:
private void MyButton_Click(CommandBarButton cmdBarbutton, ref bool cancel)
{
showwindow();
}
private void showwindow()
{
GUIForm = new MyForm();
GUIForm.ShowDialog();
}
如何将GUI放入新的线程中,并在GUI中保留后台事件?
无法重现此内容。
它可以在我的计算机上使用。
您可能正在DoWork(或ProgressChanged)内部执行需要可见窗口的操作。
在您的扩展问题中,Bgw似乎不再起作用了...
您不能简单地在另一个线程中启动(显示)窗口,还需要在该线程上运行MessagePump。
对于线程方案,可以使用:
private void showwindow()
{
GUIForm = new MyForm();
//GUIForm.ShowDialog();
Application.Run(GUIForm);
}
但这将运行无模式形式,而不是模态形式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.