2009-07-19 10 views
1

Form1のボタンクリック偶数ハンドラで、Form2を作成します。ここに私のコードは、Form1新しいフォームを作成する際の問題

// button1 belongs to Form1 
private void button1_Click(object sender, EventArgs e) 
{ 
    Form2 form2 = new Form2("www.google.com"); 
    form2.ShowDialog(); 
} 

のForm2のコンストラクタのボタン1の

さえハンドラがある

public Form2 (string str) 
{ 
    InitializeComponent(); 
    address = str; 
    button2.Text = str; // button2 belongs to Form2 
} 

public Form2() 
{ 
    InitializeComponent(); 
} 
私の質問や懸念がある

は、ボタン1件のイベントハンドラがForm1のUIスレッドで実行され、もしされますForm1のUIスレッド内で新しいForm2を作成し、UIスレッドを使用してForm2のUI要素(button2.Text)を設定します。私の理解では、各フォームはオーナーのUIスレッドを持ち、UI要素(ボタンなど)はフォーム独自のオーナースレッドのみで処理する必要がありますか?私のコードが間違っている場合は、誰かが私の現在のフォームのイベントハンドラ内の別のフォームを作成し、パラメータを渡すエレガントな方法を私に見せることができて感謝します。

VSTS 2008 + C#+ .Net 2.0を使用しています。

答えて

1

これは法律であり、うまくいくはずです。

+0

作成するフォームの数に関係なく、すべて同じUIスレッドを共有したいと思っていますか? – George2

6

コードは完全に問題ありません。どちらのフォームも同じスレッドに存在し、スレッド化を心配することなくお互いにアクセスできます。この場合は特にそうしない限り、新しいスレッドは生成されません。

補足として、Form2のコンストラクタを少し変更したいと思います。私はForm2にもパラメータのないデフォルトのコンストラクタがあり、そのコンストラクタもInitializeComponentを呼び出すと仮定しますか?その場合、コンストラクタでその呼び出しを複製する必要はありません。あなたはこのようにそれを設定している場合、それは最初にデフォルトコンストラクタが実行され、その後、あなたはあなたのカスタムのものを追加します。Winformsので

public Form2 (string str) : this() 
{ 
    address = str; 
    button2.Text = str; // button2 belongs to Form2 
} 
+0

ありがとうFredrik、私はForm2の別のコンストラクタを投稿しており、InitializeComponentを呼び出すコードは1行しかありません。私のコードの機能的なバグはありますか(私のコードを自分の元の投稿に表示したままにしておけば、あなたのものと比べて)? – George2

+1

いいえ、コードには技術的に間違ったバグはありません。それは同じことをしている別の場所での問題または回避コードです。冗長性を取り除く。 –

+0

フォームをいくつ作成しても、Windowsフォームアプリケーションでは、すべてのフォームが同じ単一UIスレッドを共有することを意味しますか? – George2

2

、アプリケーション共有内のすべてのUI要素と同じUIスレッドを。だから安心して、その意味であなたのコードに間違いはありません。

+0

フォームを何件作成しても、すべて同じUIスレッドを共有しますか? – George2

+1

そうです。同じアプリケーションに属するすべてのフォームは、同じUIスレッドを共有します。 –

1

し、Form1と同じスレッドを使用する第二の形式は

+0

フォームが何件作成されても、Windows Formsアプリケーションでは、すべてのフォームが同じ単一UIスレッドを共有することを意味しますか? – George2

+0

はい。 新しいフォームが別のスレッドにある唯一の方法は、他のスレッドを使用してフォームを作成する場合です。 – Marcom

1

あなたのコードが完全に法的:-)ドキュメントでは、唯一の任意のUIコントロールだけで、それが作成されたスレッドからアクセスされるべきであると述べています。

+0

フォームが何件作成されても、Windowsフォームアプリケーションでは、すべてのフォームが同じ単一UIスレッドを共有することを意味しますか? – George2

+0

としてmliesenは言った "あなたは新しいスレッドを開始し、このスレッド内のフォームを作成しない限り、すべてのフォームは同じスレッドで実行されます。 – chikak

1

新しいスレッドを開始してこのスレッド内でフォームを作成しない限り、すべてのフォームは同じスレッドで実行されます。

+0

フォームが何件作成されても、Windowsフォームアプリケーションでは、すべてのフォームが同じ単一UIスレッドを共有することを意味しますか? – George2

関連する問題