0

「System.InvalidOperationException: クロススレッド操作が無効です」という例外が発生します。コントロールのデータ入力は、UI ではなく別のスレッドからのものであると思われます。何か理由は?呼び出しまたは呼び出しを開始すると、良い結果が得られることがわかりました。そうであれば、コードでそれをどのように利用できますか? または、他の代替メカニズムがありますか。以下は、取得しているトレースです

                Control control = null;
                object ancestor = Parent;

ここで InvokeRequired を使用できる場所、何か考えはありますか?

4

2 に答える 2

0

通常、ブロックしない方法で UI を更新するには、BackgroundWorkerを使用します。

これにより、何を更新する必要があるかの詳細を UI スレッドに報告できる、繰り返しまたは長時間実行されるバックグラウンド操作を実行できます。

BeginInvoke は、同じ目的を達成するための .NET 1.1 の方法ですが、大部分がバックグラウンド ワーカーに置き換えられました。

.net 4.5 を使用している場合は、Asyncオプションも使用できる場合があります。それらは直接の十分な代替品ではないかもしれません。

于 2012-12-11T19:10:15.417 に答える
-2

これを form load event に書くだけです。

CheckForIllegalCrossThreadCalls = false;

この後、コードは適切に実行されます...しかし、クロススレッドは安全であることを覚えておいてください..

于 2012-12-13T11:05:10.057 に答える