※ ChatGPTを利用し、要約された質問です(原文:スレッド起動したフォームを正常に終了させる。)
スレッド起動したフォームを正常に終了させる方法
このQ&Aのポイント
Visual Studio 2005 C#.netを使用して、クラスからフォームをバックグラウンドスレッドで起動し、正常に終了させる方法について教えてください。
現在、スレッドをAbortで強制終了させているため、Dispose()が正しく行われていない問題があります。呼び出し側からアクションを起こし、スレッド側からフォームを正常に終了させる方法を知りたいです。
また、Showメソッドを使用するとフォームの表示が一瞬で終わってしまう問題があります。この理由も教えてください。
Visual Studio 2005 C#.netです。
クラスからフォームをバックグラウンドスレッド起動して、そのフォームを起動したクラスから正常にフォームを消去させたい(終了)させたいのですが、どうすればいいのでしょうか?
現在、以下のプログラムにて実現していますが、Abortで強制終了させているのでDispose();
も行われていないと思います。
呼び出し側からアクションを起こしてAbortではなく、スレッド側から正常に終了させたいのです。
また、Showメソッドだとフォーム表示が一瞬で終わってしまうのは何故でしょうか?
よろしくお願いいたします。
クラス:
public class FormDisplayClass
{
//スレッド
private System.Threading.Thread thread;
//フォーム
private TestForm TF = new TestForm();//フォームは別に存在するとします。
//表示メソッド
public void Show()
{
//スレッド設定
this.thread = new System.Threading.Thread(
new System.Threading.ThreadStart(FormShow));
//バックグラウンド
this.thread.IsBackground = true;
//スタート
this.thread.Start();
}
/// <summary>
/// スレッドを終了させる。
/// </summary>
public void Close()
{
this.thread.Abort();
}
/// <summary>
/// フォームを表示させる
/// </summary>
private void FormShow()
{
this.SWD.ShowDialog();//表示
(Showだと表示を持続できない)
this.SWD.Dispose();
}
#endregion
}
呼び出し側:
FormDisplayClass FDC = new FormDisplayClass();
private 表示メソッド
{
FDC.Show();
}
private 終了メソッド
{
sw.Close();
}
}
よろしくお願いします。
お礼
早速のアドバイスありがとうございます。 うまく行きました。 ありがとうございました。 このフラグ&ループのリソース使用については、 負担がかからないものなのでしょうか。