2012-02-21 6 views
0

バックグラウンドワーカースレッドを作成し、その中にデータをロードしてUIで表示しています。 私はUIのデータを表示中に問題があることを知っています(UIスレッドなので) しかし、私はブロックの形式でサーバーからデータを取得します。 最初に10レコードを受け取ったら、Uiを更新してから次のレコードを呼び出す必要があるとします。クロススレッド操作はC#では無効ですか?

この問題の解決方法を教えてください。おかげさまで

+0

だから問題は何ですか? –

+0

問題は、私がUpdateUserUI()メソッドを呼び出すと "クロススレッド操作が有効でない"というエラーが発生します – user662285

答えて

1

BackgroundWorkerを使用している場合は、レポートの進行状況機能を使用する必要があります。

私は通常、DoWorkメソッドの中で必要な作業を行い、GUIを更新するには、worker.ReportProgressに必要なデータを呼び出します。次に、レポートの進行方法で、そのメソッドがGUIスレッドで実行されるため、GUIを更新します。また、WorkerReportsProgressをtrueに設定してください。それ以外の場合は、ReportProgressに電話する際に例外が発生します。

+0

しかし、私の要件はいくつかのnレコード(例えば10)を取得してUIを更新してから別のレコードを呼び出してからUIを更新します。 10レコードは、クロススレッド例外を与えます。 – user662285

+0

それが私の要点です。 'DoWork'では10レコードを取得し、' ReportProgress'を呼び出して 'DoWork'のGUIを更新してさらに10レコードを取得し、' ReportProgress'をもう一度呼び出します。すべてのレコードが読み取られるまで続行します。 –

+0

レポート進捗状況パーセンテージパラメータが私に何を与えるべきか... – user662285

関連する問題