2011-03-01 33 views
3

我正在寫一個測試應用程序,我需要將窗體放在單獨的線程上。Form.Owner從.NET 3.5中單獨的線程設置

所以,如果我從主線程創建窗體窗口並設置其.Owner =這一切正常。 如果我產生線程UIThread並從新線程設置所有者,我會得到異常。 由於您無法直接訪問表單,因此獲取異常是可以理解的。 我的問題是有消息,我需要趕上主線程並做BeginInvoke推它在消息泵?由於UIForm ShowInTaskbar設置爲false,我需要單擊任務欄中的主應用程序,並使用其所有子窗口進行恢復。

private void UIThread() // New Thread call 
{ 
     UIForm form = new UIForm(); 

     form.ShowInTaskbar = false; 
     form.Owner = this; 

     Application.Run(form); // Expected Exception 
} 
+5

你必須pinvoke SetParent來解決這個問題。最好的辦法是不要這樣做。 – 2011-03-01 22:59:57

回答

0

我不確定,也許每個應用程序只能調用一次Application.Run。看看這一個會爲你工作

Application.Run(new Form1()); 
----------------- 
public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 

     var thread = new Thread(
      () => 
       { 
        var form2 = new Form {Owner = this}; 
       }); 
     thread.Start(); 
    } 
}