1

メイン スレッドで作成されたフォームをセカンダリ スレッドから非表示にしようとしていますが、hide メソッドを呼び出すと明らかにクロススレッドの問題が発生します。私はこれが初めてで、これを修正する方法についての手がかりがありません。メインスレッドで作成されたものを変更する場合、メソッドを呼び出すデリゲートを常に作成しましたが、組み込みの非表示メソッドに対してここでそれを行う方法がわかりません。さらに情報が必要な場合はお知らせください。

コード:

public partial class MainForm : Form
{
    ControlPanelForm m_controlPanel = new ControlPanelForm();
    // ....
    void MeterThread()
    {
        while (true)
        {
            // ....
            if (EMOdetected)
            {
                m_controlPanel.Deinitialize();                    
                m_controlPanel.Hide();         // **** //
            }
        }
    }
}

基本的に、私の MainForm は、何らかの作業を行うコントロール パネル フォームを表示します。バックグラウンドで、スレッドを実行して何かをチェックしています。そのうちの 1 つは緊急オフで、その時点でコントロール パネルをシャットダウンして非表示にしたいと考えています。

その場で呼び出そうとすると、

m_controlPanel.Invoke(new EMOHandler(m_controlPanel.Hide));    // **** //

デバッグすると何も実行されないように見えます。コマンドを渡すだけのようです。繰り返しますが、私はこれに慣れていないので、あらゆる説明を歓迎します。

4

3 に答える 3