7

「Dev」というフォームには、ユーザーがフォームを閉じたときにスレッドが適切に閉じられるように、次の OnFormClosing 関数があります。

protected override void OnFormClosing(FormClosingEventArgs e)
{
    base.OnFormClosing(e);
    dev.stopMultipleColorsWatcher();
}

「Dev」フォームを直接閉じると正常に動作します。しかし、メイン フォーム ("Form1") が閉じられたために "Dev" フォームが閉じられた場合 (これによりプログラムが終了します)、OnFormClosing()"Dev" の関数は呼び出されないため、スレッドは実行を続け、プログラムのプロセスはタスクマネージャー経由で殺されます。

これを修正するにはどうすればよいですか? OnFormClosing()「Form1」に関数を追加して、「Dev」で関数を呼び出すことができることに気付きOnFormClosing()ましたが、もう少しクリーンなものを望んでいました。

アップデート:

Dev フォームはメイン フォームから開きます。

private void btn_opendev_Click(object sender, EventArgs e)
{
    Dev frm = new Dev();
    frm.Show();
}

メイン フォームは実際には "programname.UI.Main" と呼ばれ (私は知っています..)、"Program.cs" で開かれます (つまり、プログラムのエントリ ポイント)。

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new programname.UI.Main());
}
4

1 に答える 1

4

それ以外の

    Dev frm = new Dev();
    frm.Show();

これを試して

    Dev frm = new Dev();
    frm.Show(this);

このメソッドは子フォームに所有者を表示し、メイン フォームに送られるすべてのイベントは子フォームに送られる必要があります。

于 2012-07-13T13:56:53.117 に答える