問題タブ [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 投票する
9 に答える
10637 参照

c# - ツリー ウォークが進行中のため、現時点ではこのノードの論理子を変更できません とはどういう意味ですか?

バックグラウンド ワーカー スレッドの完了したメソッドで、オブジェクトの DataContext を設定しています。何らかの理由で、次のようなエラーが表示されます。

Chart1.DataContext=allDates 行を指しているツリー ウォークが進行中であるため、現時点ではこのノードの論理的な子を変更できません。

a tree walk is in progress とはどういう意味ですか? Dispatcher 操作も使用してこのセットを実行しようとしましたが、同じエラーが発生します...何かアイデアはありますか? Google は、このエラー メッセージについて何も表示しません。

これを引き起こしているコードは、Microsoft の Charting ツールキットの内部にあります... Microsoft の制御にバグが見つかったのだろうか...

ディスパッチャなし:

ディスパッチャーの場合:

エラー:

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

c# - C# で停止した BackgroundWorker を検出する

バックグラウンドワーカー オブジェクトを使用して、必要に応じて非同期処理とスレッド処理を実行します。バックグラウンドワーカーを実行すると、実行中に停止して終了しないことがあります。通常、同時に複数のバックグラウンドワーカーを実行しているときにこれを行います。

ストールしたときにやりたいことは、操作をキャンセルして再実行することです。私の問題は、いつ停止したかを検出する方法がわからないことです。ワーカーが停止したことを「通知」するために追加する必要があるコードはありますか、または知る方法はありませんか?

ありがとう、

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

wpf - WinForms BackgroundWorker からの WPF ウィンドウの作成

多数の Window クラスを含み、それらのウィンドウを表示するメソッドを公開する WPF dll があります。

また、BackgroundWorker コンポーネントの DoWork メソッド内で WPF プロジェクトのこれらのメソッドの 1 つを呼び出している別の WinForms プロジェクトもあります。

WPF ウィンドウをインスタンス化するコード行で、次のランタイム エラーが発生します。

多くの UI コンポーネントがこれを必要とするため、呼び出しスレッドは STA でなければなりません。

グーグル検索でこの議論ができました。(Jon Skeet は、Stack Overflow に加えて他のサイトの質問にも答えていることがわかりました!) 彼はこの記事にリンクし、次のように述べています。

BackgroundWorker コンポーネントは WPF とうまく連携します ...

その記事では、DispatcherObject クラスの使用についても言及していますが、それを機能させる方法がわからないので、BackgroundWorker コンポーネントを引き続き使用したいと考えています。

テストケースとして、エラーを再現するために次のコードを思いつきました。WPF クラス ライブラリの Window1.xaml.vb のコードは次のとおりです。

WinForms アプリケーションの Form1.vb のコードは次のとおりです。

Window1.xaml.vb 自体に BackgroundWorker コンポーネントを配置しても同様のエラーが発生します。それで、その記事は間違っていて、WPF で BackgroundWorker を実際に使用することはできませんか? または、それを機能させるために他に何かする必要がありますか?

BackgroundWorker が機能しない場合、上記の Form1.vb のコードを置き換えて、代わりに Dispatcher を使用するにはどうすればよいでしょうか?

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

c# - WinFormsのワーカースレッドをキャンセルする

私は2つのリストボックスを持っています。1つはマスター、もう1つは子です。マスターのインデックスが変更されると、子リストボックスにはマスターに関連するレコードが適切に入力されます。私の問題は、1つのマスターがすべてのレコードを取得するのに長い時間がかかり、レコードの取得が完了する前に、ユーザーが別のマスターをクリックして、入力にかかる時間が短い場合に発生します。最終的には、ユーザーがそのマスターを使用していなくても、時間がかかっていたマスターが子リストボックスに入力されます。

私はBackgroundWorkerスレッドを使用して入力を行ってきました。

マスターのSelectedIndexChangedイベントをサブスクライブし、キャンセルをtrueに設定しました。

DoWorkメソッドのコードは次のとおりです。

しかし、何らかの理由で、完了したワーカーのコードが呼び出され続けます。ワーカーが完成したコードは次のとおりです。

このスレッドが戻るのをキャンセルするために他に何かしなければならないことはありますか?

0 投票する
6 に答える
2151 参照

c# - 一度に 1 つのアイテムを処理する BackgroundWorker と Timer

私のアプリは、ユーザーがファイルをアップロードできるディレクトリを監視します。新しいファイルが検出されると、キューに追加されます。キューを通過し、ファイルのアップロードが完了したかどうかを判断するタイマーがあります。完了したファイルがある場合は、最新のものを取得し、バックグラウンド タスクの実行を開始します (BackgroundWorker を使用)。

私の問題は、バックグラウンド タスクの実行中にタイマーを処理する方法がわからないことです。たとえば、タイマーが 10 秒に設定されていて、バックグラウンド ワーカーがまだ動作している場合、次の反復までタイマーが別のバックグラウンド ワーカーの実行をスキップするようにします。

また、各タスクの情報は Queue (ListView コントロール) に格納され、ListViewItem をバックグラウンド ワーカーに渡します。ListViewItem を渡すと副作用があるかどうか興味があります。

ありがとう!

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

c# - リストボックスにアイテムを追加しているときにBackgroundWorkerがC#で問題を引き起こしていますか?

マージするために最低 2 つのファイルを指定する必要があるリストボックスがあります。[マージ] ボタンをクリックするとマージが完了します。プログレス バーが起動し、ファイルがマージされたことを示すメッセージ ボックスが表示されます。バックグラウンド ワーカーを使用してプログレス バーを実行しています。

問題は、マージが 2 つのファイルで完了したときに、もう 1 つのファイルを追加し、マージ ボタンをクリックして、マージが完了したというメッセージが表示され、メッセージ ボックスで [OK] をクリックすると、メッセージ ボックスに、マージが行われたという同じメッセージが再び表示されることです。このメッセージ ボックスは、リスト ボックスにファイルを追加するたびに表示され続けます。

たとえば、2 つのファイルの場合、さらに 1 つのファイルを追加するとメッセージが 1ce den と表示され、2ice と表示され、リストボックスに 1 つ以上のファイルが表示され、3ic と表示されます。

デバッガーを使用して追跡したところ、リストボックスにファイルを追加するたびに、Background Worker Runcompleted イベントがその回数呼び出されることに気付きました。Merge ボタンの Click イベントのコードは次のとおりです...

どこが間違っているのかわかりません。助けてください...ありがとう...

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

.net - .net BackgroundWorkerからの出力をバッファリングする方法は?

現在、で収集している外部ソースからのデータストリームがありますBackgroundWorker。データの別のチャンクを取得するたびに、ReportProgress()呼び出しを使用してそのデータをGUIに提示します。

ProgressChanged関数は単なる同期メカニズムであるという印象を受けますが、ワーカースレッドがそれを呼び出すと、GUIスレッドが変更を処理している間、両方のスレッドがロックされます。したがって、問題は、バックグラウンドスレッドがGUIを更新している間、データを受信できないことです。つまり、いくつかのパケットが失われます。それは正しいですか、それとも私のパケットが他の場所から来る可能性が高いですか?

それ原因である場合、GUI更新を行うために2番目のスレッドを追加することは合理的な解決策でしょうか、それとも私が掘り下げるべきこれらの問題を解決するためのより良い/より徹底的な方法がありますか?

どんな考えや提案も大歓迎です。

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

c# - BackgroundWorkerで未処理の例外

私は、BackgroundWorkerオブジェクトを利用して長時間実行される操作を実行する小さなWinFormsアプリを持っています。

バックグラウンド操作は、通常、誰かが再作成されているファイルを開いているときに、時折例外をスローします。

コードがIDEから実行されているかどうかに関係なく、.NETは、未処理の例外が発生したことをユーザーに通知するエラーダイアログをポップアップします。リリース構成を使用してコードをコンパイルしても、これは変更されません。

MSDNによると:

操作でコードが処理しない例外が発生した場合、BackgroundWorkerは例外をキャッチし、RunWorkerCompletedイベントハンドラーに渡します。この例外は、System.ComponentModel..::。RunWorkerCompletedEventArgsのErrorプロパティとして公開されます。Visual Studioデバッガーで実行している場合、デバッガーは、未処理の例外が発生したDoWorkイベントハンドラーのポイントで中断します。

これらの例外がときどきスローされることを期待しており、DoWorkではなくRunWorkerCompletedイベントでそれらを処理したいと思います。私のコードは正しく機能し、エラーはRunWorkerCompletedイベント内で正しく処理されますが、「未処理の例外」の発生を訴える.NETエラーダイアログを停止する方法を私は一生理解できません。

BackgroundWorkerはそのエラーを自動的にキャッチすることになっているのではありませんか?それはMSDNのドキュメントに記載されていることではありませんか?RunWorkerCompletedEventArgsのErrorプロパティに例外をプロポーションさせながら、このエラー処理されていることを.NETに通知するにはどうすればよいですか?