2010-06-21 55 views
1

我想在背景工作正常的时候隐藏主窗口,但是当我在backgroundworker.RunWorkerAsync()之前将主窗体设置为this.Hide()时,ProgressChangedRunWorkerCompleted都没有触发。我怎样才能做到这一点?谢谢。在STA线程中:Form.Hide()= BackgroundWorker事件不会触发?

更多代码: ProgressChangedRunWorkerCompleted与击发:

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

对不起:更多信息:

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

ProgressChangedRunWorkerCompleted不与击发 的形式在共享使用(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中有我的背景事件?

+0

你能发布后台工作者代码和事件处理程序代码吗?如果长时间尝试将其降低到重复出现问题的最小代码。 – ChrisF 2010-06-21 10:52:29

+0

请看我编辑的帖子,谢谢。 – Bolu 2010-06-21 11:28:24

回答

1

无法重现此操作。

它适用于我的电脑。

您可能在DoWork(或者ProgressChanged)中需要一个可见的窗口。


在您的扩展问题BGW似乎没有再发挥作用......

你不能简单地启动(显示)一个窗口在另一个线程,你需要运行在一个MessagePump线程也是如此。

的线程的情况下,你可以使用:

private void showwindow() 
{ 
    GUIForm = new MyForm();   
    //GUIForm.ShowDialog(); 
    Application.Run(GUIForm); 
} 

但将运行形态无模式,而不是模态。

+0

发现它不是DoWork,而是表格本身,请看我编辑过的帖子。谢谢。 – Bolu 2010-06-21 11:30:17

+0

谢谢,解决了这个问题! – Bolu 2010-06-21 12:18:06