0

アプリケーションが使用するメイン ウィンドウ (10,000 行以上のコード) の読み込み時間を短縮しようとしており、プログラムの 1 つのメソッドにスレッドを統合しようとしています。フォームにすべてのデータを設定する表示方法を分割しようとしています.1000行を超えるため、分割するとフォームの読み込み時間が短縮されます。

私はまだスレッド化に慣れていませんが、実際には何も変更されていないため、表示コードを互いに並べて実行しているだけで、スレッド化が最善の策であると考えました。ただし、これには 1 つの問題があります。それらはすべて、同様の方法を使用して、アカウントに応じてフォーム上のコンポーネントを表示/有効にする必要があるかどうかを判断します。

これは、フォームにコンポーネントのテキストを設定しようとすると、例外が発生する場所です。これを読んだところ、スレッド内のアイテムを別のスレッドから更新することはできませんが、オンラインで解決策やヘルプを見つけることができませんでした。どのような解決策が考えられるでしょうか?

4

2 に答える 2

0

InvokeメソッドまたはBeginInvokeコントロールまたはフォームのメソッドのいずれかを使用する必要があります。すべてのControlオブジェクトにはこれらのメソッドがあり、 からForm継承されControlているため、すべてのフォームにもこれらのメソッドがあります。これらのメソッドは両方とも、UI スレッドから特定のデリゲートを呼び出します。ただし、UI スレッドがビジーの場合、スレッドが解放されるまでデリゲートは実行されません。を呼び出すとInvoke、UI スレッドがデリゲートの実行を終了するまで、ワーカー スレッドはブロック (ハング) します。ただし、 を呼び出すBeginInvokeと、ワーカー スレッドは続行し、UI スレッドがデリゲートを実行するのを待ちません。

于 2012-08-29T18:01:28.210 に答える
0

呼び出し機能を使用できますObj.Invoke(Delegate)

于 2012-08-29T17:52:22.430 に答える