私は過去1日かそこらの間、これを理解しようとしてきました。
Form1 を持つプログラムと、新しいスレッドで Form2 を生成するボタンがあります。
また、Form1 には Form2 を閉じる別のボタンがありますが、Form2 は別のスレッドにあるため、そのオブジェクトに直接触れることはできません。
できt.Abort()
ましたが、例外がスローされます。
どうすれば他のスレッドに優雅に触れることができますか? それに何かをしますか?
たとえば、Form1 内からフォームを閉じるにはどうすればよいでしょうか。
「別のスレッド内からフォームを閉じる方法」をGoogleで検索したところ、InvokeとDelegateを示唆するリンクがいくつか見つかりましたが、いくつか試してみたところ、明らかにそれを適切に使用する方法がわかりません.
私が持っているコードにそれがどのように適用されるかを理解するのを手伝ってくれる人はいますか? どのような文脈で?
便宜上、プロジェクトを github にアップロードしました: https://github.com/powercat/WindowsFormsApplication7/archive/master.zip
--
コード:
【フォーム1.cs】
public void FormThread()
{
Application.Run(new Form2());
}
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(FormThread));
t.Start();
}
private void button2_Click(object sender, EventArgs e)
{
//Need to close Form2 from here.
}
【Form2.cs】
別のフォーム コードがあります。