繁体   English   中英

在STA线程中:Form.Hide()= BackgroundWorker事件未触发?

[英]In a STA thread: Form.Hide() = BackgroundWorker event not firing?

我想在backgroundworker工作时隐藏主窗口,但是当我在this.Hide()之前将主窗体设置为this.Hide() backgroundworker.RunWorkerAsync()ProgressChangedRunWorkerCompleted均不会触发。 我该如何实现? 谢谢。

更多代码: ProgressChangedRunWorkerCompleted以下命令触发:

private void button1_Click(object sender, EventArgs e)
 {
    backgroundworker.RunWorkerAsync();
 }

ProgressChangedRunWorkerCompleted不适用于以下情况:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM