問題タブ [cross-thread]
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.
c# - backgroudWorker C# を使用するとクロススレッド操作エラーが発生する
backgroundWorker を使用してテキストボックスにデータをフェッチするときにプログレス バーを表示したいと考えています。しかし、デバッグ時に次のエラーが発生しました。
同様のケースを読みましたが、問題を解決できません。
System.InvalidOperationException: Texbox txtResults ではクロススレッド操作が無効です。
私はC#が初めてです、助けてください!ありがとう!
backgroundWorker DoWork 時にエラーが発生します。
編集済み:追加
vb.net - Timers.Timer を使用して別のスレッドからコントロールを安全に呼び出す方法
いろいろな投稿を読んで、練習プロジェクトを作ったのですが、うまくいきません。フォームにはボタンとテキスト ボックスがあり、既定のテキストは「更新回数 0 回」です。ボタンをクリックするとタイマーが開始され、そのたびにテキストが更新された回数でテキストが更新されます。
クロス スレッド呼び出しの例外はスローされませんが、テキスト ボックスを呼び出すと、その .Text = ""、テキストは更新されますが、フォーム上のテキスト ボックスは更新されません。InvokeRequired は常に false です。
解決済み クラス TimerTest で、このコード 'Private Shared myform As Form1 = Form1' を追加し、'Form1.UpdateText' を 'myform.UpdateText' に変更しました
vb.net - .net 追加ハンドラ マルチスレッド
ここでは、vb のマルチスレッドを使用して結び目を作っています。追加ハンドラ アドレスを使用して 4 つのイベントをサブスクライブし、メイン フォームの関数をポイントする作業プログラムがあります。私は、関数ごとに4つの一意のアドレスのそれぞれを期待して、まったく同じことを行う4つの個別の関数を持っています。それらには呼び出しが必要であり、関数の先頭で私のデリゲートを呼び出します。関数が行うことは、別のプロセスのスレッドを生成し、それに処理を渡すことだけです。
プログラムを使用して、サブスクリプションの 1 つからのイベントを処理すると、すべてがうまく機能します。2 を処理し始めると少し遅くなり、次に 4 を処理すると本当に詰まります。サブスクライブされた各イベントを生成すると、それらはすべて同時に発生するため、ウィンドウは同時に 4 つの要求を取得し、おそらくそれらをキューに入れ、それらを処理します。したがって、これは私のアプリケーションの 1 つのボトルネックです。
可能かどうか疑問に思ったのは、サブスクライブされたイベント (つまり、ハンドラー アドレスを追加すること) を別のスレッドに向け、発生したイベントを複数のスレッドで非同期に処理することでした。そのため、それらをキューに入れません。 1スレッドで。2 つのアプリケーションを実行し、そのうちの 2 つの分割されたイベントを処理できるため、それが可能であることはわかっています。これにより、パフォーマンスが向上します。4 つの個別のアプリケーションを実行する場合も同様です。
私はすべての適切なビットを持っていることを知っていますが、それを正しい順序で完全につなぎ合わせることができません.
大まかな例で申し訳ありませんが、これは私が現在行っていることをかなり強調しています
myevent.eventhashappened は、mainUI スレッドを使用してイベントを受信し、受信時に他のプログラム スレッドにパントするのではなく、複数のスレッドで同時に実行したいサブスクリプションです。
Addhandler サブスクリプションを別のクラスに配置し、そのインスタンスをこのように呼び出すことを考えました
次に、このように4つのリスナークラスを宣言するだけです
それはうまくいくでしょうか?
私がここで起こっていることを示そうとしていることを明確にするために
myevent.eventhappened は、最初に追加するフックです。外部イベントによって定期的にこれが発生します (現時点ではわかりやすくするためにコードには示されていません)
これにより、イベントを処理する新しいプロセスのスレッドを生成する ui のルーチンがトリガーされ、いくつかの処理 (これも表示されていません) が実行され、スレッドが開始され、スレッドが完了すると、更新するいくつかのパラメーターを使用して ui にコールバックされます。 (再び表示されません)
私の希望する動作は、その初期フックを開始し、UI ではない別のスレッドでも処理することです。ある時点で常に UI に戻る必要がありますが、パイプラインの最初のボトルネックを解消したかったのです。
よろしく