2011-03-01 5 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

これを回避するには、SetParentをピンボケする必要があります。最善のことはこれをしないことです。 –

答えて

0

わかりませんが、Application.Runはアプリケーションごとに1回だけ呼び出されることがあります。これがあなたに役立つかどうかを確認してください。

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

     var thread = new Thread(
      () => 
       { 
        var form2 = new Form {Owner = this}; 
       }); 
     thread.Start(); 
    } 
} 
関連する問題