フォームでInvoke()を呼び出す際のコードに問題がありますか?

c# multithreading
フォームでInvoke()を呼び出す際のコードに問題がありますか?

UIスレッドとは異なるスレッドで呼び出されるメソッドがあります。

このメソッドが呼び出されると、コントロールがなくなって、何も起こりません。

コードは以下のようになります。

    private void MainForm_NewMeasurementState(Measurement measurement)
            {
                try
                {
                    if (InvokeRequired)
                    {
                        // we were called on a worker thread
                        // marshall the call to the user interface thread
                        this.Invoke(new Action(MainForm_NewMeasurementState), new object[] { measurement });
                        return;
                    }
// some other code
    }

コントロールは「if」ステートメントに含まれますが、何が起こるかわかりません。他のコードは呼び出されません。

任意の助けをいただければ幸いです。

  0  0


ベストアンサー

コードが完了するのを待っているなどの理由で、メインスレッドがブロックされている可能性があります(つまり、 2つのスレッドが互いに待機しているため、コードはデッドロックされています)。

メインUIスレッドがブロックされている理由を調べるか、「Invoke」の代わりに「BeginInvoke」を使用してください。

1


タイトルとURLをコピーしました