1

ユーザーコントロールと、class1の結果をユーザーコントロールに出力したい2つのクラスがあります。この行を使用してクラスから結果を送信しています

((merge.MyControl)(MyControlInstance)).CLIDisplay = e.WorkItem.CustomerId;

結果を表示するための私のコントロールプロパティは

public string CLIDisplay
        {
            get { return lblResultCLI.Text; }
            set
            {
                    lblResultCLI.Text = value;

            }
        }

しかし、C#フォームにクラスを呼び出すと、次の例外が発生します

An exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll but was not handled in user code

Additional information: Cross-thread operation not valid: Control 'tbxEvents' accessed from a thread other than the thread it was created on.
4

1 に答える 1

8

あなたはinvokeを使用する必要があります

this.Invoke((MethodInvoker) delegate
{
   lblResultCLI.Text = value;
});

次回は必ずグーグルを使用してください...

クロススレッド操作が無効です:作成されたスレッド以外のスレッドからアクセスされたコントロール

このエラーは、コードを実行しているスレッドとは別のスレッドでlblResultCLIが作成されたために発生します。そのため、Invokeを使用して、lblResultCLIコントロールにアクセスするコードが作成されたスレッドと同じスレッドで実行されるようにする必要があります。

于 2012-05-11T09:14:58.163 に答える