バックグラウンドワーカースレッドを作成し、その中にデータをロードしてUIで表示しています。 私はUIのデータを表示中に問題があることを知っています(UIスレッドなので) しかし、私はブロックの形式でサーバーからデータを取得します。 最初に10レコードを受け取ったら、Uiを更新してから次のレコードを呼び出す必要があるとします。クロススレッド操作はC#では無効ですか?
この問題の解決方法を教えてください。おかげさまで
バックグラウンドワーカースレッドを作成し、その中にデータをロードしてUIで表示しています。 私はUIのデータを表示中に問題があることを知っています(UIスレッドなので) しかし、私はブロックの形式でサーバーからデータを取得します。 最初に10レコードを受け取ったら、Uiを更新してから次のレコードを呼び出す必要があるとします。クロススレッド操作はC#では無効ですか?
この問題の解決方法を教えてください。おかげさまで
BackgroundWorker
を使用している場合は、レポートの進行状況機能を使用する必要があります。
私は通常、DoWorkメソッドの中で必要な作業を行い、GUIを更新するには、worker.ReportProgress
に必要なデータを呼び出します。次に、レポートの進行方法で、そのメソッドがGUIスレッドで実行されるため、GUIを更新します。また、WorkerReportsProgress
をtrueに設定してください。それ以外の場合は、ReportProgress
に電話する際に例外が発生します。
しかし、私の要件はいくつかのnレコード(例えば10)を取得してUIを更新してから別のレコードを呼び出してからUIを更新します。 10レコードは、クロススレッド例外を与えます。 – user662285
それが私の要点です。 'DoWork'では10レコードを取得し、' ReportProgress'を呼び出して 'DoWork'のGUIを更新してさらに10レコードを取得し、' ReportProgress'をもう一度呼び出します。すべてのレコードが読み取られるまで続行します。 –
レポート進捗状況パーセンテージパラメータが私に何を与えるべきか... – user662285
だから問題は何ですか? –
問題は、私がUpdateUserUI()メソッドを呼び出すと "クロススレッド操作が有効でない"というエラーが発生します – user662285