問題タブ [backgroundworker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
27941 参照

c# - WPF では、Windows フォームの Suspend/ResumeLayout() および BackgroundWorker() に相当するものは何ですか

コード ビハインドの関数を使用していて、ステータス バーに "Loading..." を表示するように実装したい場合は、次のようにすると理にかなっていますが、WinForms からわかるように、NoNo です。

WinForms Chapter 1 クラス 101 から、フォームは関数全体が完了するまでユーザーに変更を表示しないということです...つまり、「読み込み中」メッセージがユーザーに表示されることはありません。次のコードが必要です。

WPF でこの基本的な問題に対処するためのベスト プラクティスは何ですか?

0 投票する
18 に答える
86700 参照

c# - BackgroundWorker がキャンセルされるのを待つ方法は?

あなたのために何かをするオブジェクトの架空のメソッドを考えてみましょう:

BackgroundWorker が完了するのをどのように待つことができますか?


過去に人々は試しました:

ただし、イベントが処理されるまでクリアされず、アプリケーションがアイドル状態になるまでそのイベントを処理できないため、これはデッドロックになります。ワーカーが完了するまで、アプリケーションはアイドル状態になりません。(さらに、それは忙しいループです - 嫌です。)IsBusyRunWorkerCompleted

他の人は、それを次のように提案しました:

その問題は、Application.DoEvents()現在キューにあるメッセージが処理され、再入の問題が発生することです (.NET は再入可能ではありません)。

コードがイベントを待機するイベント同期オブジェクトを含むいくつかのソリューションを使用したいと考えています-ワーカーのRunWorkerCompletedイベントハンドラーが設定します。何かのようなもの:

しかし、デッドロックに戻りました。アプリケーションがアイドル状態になるまでイベント ハンドラーを実行できず、アプリケーションはイベントを待っているためアイドル状態になりません。

では、BackgroundWorker が終了するのをどのように待つことができるでしょうか?


更新 人々はこの質問に混乱しているようです。彼らは、私が BackgroundWorker を次のように使用すると考えているようです。

それはそうではありませんそれは私がやっていることではありません、そしてそれはここで尋ねられていることではありません. その場合、バックグラウンド ワーカーを使用しても意味がありません。

0 投票する
3 に答える
17800 参照

c# - .NET Web サービスと BackgroundWorker スレッド

Web サービス メソッドで非同期処理を実行しようとしています。次の API 呼び出しがあるとします: http://www.example.com/api.asmx

メソッドはGetProducts()と呼ばれます。

私はこの GetProducts メソッドで、いくつかの処理を行い (例: データベースからデータを取得)、結果を返す直前に非同期処理を実行します (たとえば、メールを送信します)。

これが私がしたことです。

さて、このコードを実行すると、電子メールは送信されません。Thread.Sleep .. のコメントを外すと、電子メールが送信されます。

では、バックグラウンド ワーカー スレッドが破棄されるのはなぜでしょうか。親スレッドに依存していますか?これは、asp.net Web アプリでバックグラウンドまたは分岐スレッドを行うべき間違った方法ですか?

0 投票する
2 に答える
2579 参照

c# - BackgroundWorker イベントが発生しないことについて混乱している

これはやや不自然な例のように思えるかもしれませんが、頭を悩ませています。

わかりました。WindowsForm をインスタンス化し、フォームで DoSomeWork() というメソッドを呼び出すコンソール アプリがあります。

Form1はこんな感じ…

外側のクラスは、次のようになります...

そして最後に InnerClass は次のようになります...

(私には) 不明な理由で、InnerClass の BacgroundWorker はProgressChangedイベントを発生させないようです。交換したら

クラス Program では、正常に動作します。では、フォームを介して同じメソッドを呼び出しているときにイベントが発生しないのはなぜですか?

ありがとう!

編集:私は、ProgressChanged イベント ハンドラーを NotImplementedException をスローするままにしておくことで、人々を遠ざけているように見えたので、わかりやすくするために削除しました。

0 投票する
3 に答える
2725 参照

c# - BackgroundWorker インスタンスがガベージ コレクションされるのはいつですか

このコードブロックを検討してください

それはすべてうまくいきますが、オブジェクト(ワーカー、ビュー、更新)がガベージコレクションされない理由を理解したいです

0 投票する
4 に答える
3121 参照

datagridview - BackgroundWorker から DataGridView への「ストリーミング」結果

BackgroundWorker から DataGridView に一連の結果 (DataTable など) を「ストリーミング」する方法はありますか。私がやりたいことは、データをクエリし、結果が来るとDataGridViewに入力することです(SQL Server Management Studio のクエリ グリッドの結果のように)。私が最初に考えたのは、(UI のフリーズ効果を回避するために) BackgroundWorker を使用することでしたが、BackgroundWorker が結果を読み込んでいるため、認識可能な「ラグ」がまだあります。

これについて最善の方法は何ですか?

0 投票する
5 に答える
25875 参照

c# - BackgroundWorker で未処理の例外

私の WinForms アプリは、多数のBackgroundWorkerオブジェクトを使用して、データベースから情報を取得します。私が BackgroundWorker を使用しているのは、実行時間の長いデータベース クエリ中に UI がブロックされないようにし、スレッド モデルを簡素化できるためです。

これらのバックグラウンド スレッドの一部で時折 DatabaseExceptions が発生しています。また、デバッグ中にワーカー スレッドでこれらの例外の少なくとも 1 つを確認しました。私は、これらの例外がタイムアウトであるとかなり確信しています。

私の質問は、これらのバックグラウンド ワーカー スレッドのいずれかで未処理の例外が発生した場合に何が起こるかについてです。

別のスレッドで例外をキャッチできるとは思いませんが、WorkerCompleted メソッドが実行されることを期待できますか? 例外を調べることができる BackgroundWorker のプロパティまたはメソッドはありますか?

0 投票する
5 に答える
2494 参照

sql-server - SqlDataAdapter から DataGridView を埋めるバックグラウンド

DataGridView にロードしたい大規模なデータセット (100,000 レコード以上) があります。これを行うストアド プロシージャは、完了するまでに 10 秒以上かかる場合があります。

これまでのところ、UI がロックするのを防ぐ BackgroundWorker があり、初歩的な「お待ちください」ダイアログを実装しました。

私がやりたいのは、何らかの方法でデータベースから返された結果を DataGridView に入力することです。これを説明する最良の方法は、SQL Server Management Studio の動作です。クエリを実行すると、クエリがまだ実行中であっても、行がすぐに返されます。クエリを停止し、返された行を保持するボタンもあります。

自分のコードでこれを行うにはどうすればよいですか?

DataGridView はデータの行を表示するためにのみ使用され、ユーザーは 1 つをクリックして別のことを行います。データベースには何も書き戻されません。

0 投票する
5 に答える
3269 参照

backgroundworker - BackgroundWorker スレッド: UI の更新と操作の中止

バックグラウンド ワーカー スレッドで一連の時間のかかる操作を実行しています。さまざまな段階で、デリゲートを呼び出して (Windows フォームの) プログレス バーを更新します。ただし、より多くの時間操作の 1 つがコードの 1 行で発生します。

次のことは可能ですか?

a) コードの 1 行が実行されている間に UI を更新するか、少なくとも作業が行われていることをユーザーに示すアニメーション アイコンを表示します。

b)コードの1行が実行されている間、ユーザーがバックグラウンドワーカースレッドをキャンセルできるようにします

0 投票する
3 に答える
518 参照

com - .NET BackgroundWorker スレッドからのアンマネージ コードへの呼び出しが UI に影響するのはなぜですか?

BackgroundWorker.NET 2.0スレッドで長時間実行される一連の操作があります。参照アセンブリにあるアンマネージ コードを呼び出すと、呼び出しが完了するまで UI がフリーズします。

どうしてこれなの?BackgroundWorkerスレッドからこれらの呼び出しを行うべきではありませんか?


はい、それは COM コンポーネントですが、それが STA であるかどうか、およびその影響/解決策が何であるかを判断する方法がわかりません。そのコンポーネントを何度か呼び出しますが、UI が応答しなくなっているのに気付くのは長時間実行されるものだけです。

これらの呼び出しは、サーバーからデータを取得します。