2010-06-21 26 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