問題タブ [dispatcher]

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 投票する
5 に答える
3264 参照

c# - UIをすぐに更新するコマンドはありますか?

このコードでプログレスバーを実行中の1から100に更新したいと思います。

しかし、その結果、ループが終了するまでUIがフリーズします。

Dispatcherは助けることができることを知っていますが、私は機能を分割したくありません。

すぐにUIを更新するコマンドはありますか。

編集:私はWPFを使用しており、Thread.Sleepを使用して長時間実行されるプロセスをシミュレートしています。

実際、私は好きなコマンドが欲しいですApplication.DoEvents。しかし、このコマンドがWPFで見つかりません。

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

model-view-controller - Zend Frameworkで手動ディスパッチが可能ですか?

MVC アプリケーションのコントローラー アクションの実行を手動で開始する方法を知りたいです。私の目標は、単純なインクルードを使用して、/myController/myAction の html 出力を別の php アプリケーション (typo3) に統合することです。コントローラー、ビュー、およびレイアウトを手動でインスタンス化して、ディスパッチャーをバイパスすることを考えました。悲しいことに、私はそれを機能させることができません。私の現在のアプローチは次のようになります。

レイアウトのインスタンス化は問題ありませんが、コントローラーを作成すると複雑になります。ビューはインスタンス化中にすでに必要とされているため、コンストラクターを呼び出した後にビュー インスタンスを設定しても機能しません。

そのようなシナリオの「正しい」方法は何でしょうか? 定義済みのコントローラーとアクション名を使用する単純なユーザー定義のディスパッチャーを実装するかもしれません。

あいさつ

ゲオルク・ヴェヒター

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

wpf - ListCollectionView がコレクションを監視しているときに Dispatcher.Invoke がハングする

私の問題は、この投稿で言及されている問題と非常によく似ています。基本的に、Invoke はハングしています (デバッガーの外部で実行されている場合のみ)。Invoke呼び出しのネストが原因だと思います。

私は MVVM Light を使用しており、マルチスレッドに適した ObservableCollection の 2 つの実装を試しまし。後者は、「このスレッドによって所有されている」InvalidOperationException で失敗するまで、より良いように見えました。前者の私のコピーを見ると、そこに例外を飲み込んでいるように見えます。やんちゃやんちゃ。これが、プロパティが変更された「失敗」の理由です。

面倒くさい操作の流れはこちら。ほぼすべての時点で、物事を ui スレッドに移動するか、UI スレッドから移動しようとしました。私はぶら下がりを延期することに成功しましたが、プロパティの変更を犠牲にして失敗しました。

  • リクエストはスレッドから WCF 経由でプライマリ ViewModel に送信されます
  • リクエストが解析されます(バックグラウンド スレッドとメイン スレッドの呼び出しの両方を試しました)
  • ReportEntry オブジェクトはデータベースから取得されます
  • Messenger を介して UI に送信され、編集ダイアログの表示を要求するメッセージ。
  • メイン ウィンドウがメッセージを処理し、IEditableObject.BeginEdit が呼び出され、編集ダイアログが表示されます。
  • 戻ると、Messenger コールバック アクションが呼び出されます。
  • ReportEntry を適切なコレクションに追加する準備が整いました。MainViewModel には、ReportViewModel のコレクションを持つ FileViewModel のコレクションがあります。
    • ReportViewModels は通常、FileModel のコレクションの CollectionChanged イベントを監視している FileViewModel によって作成されます。これ以上のネストを避けるためにこれをバイパスしようとしましたが、役に立ちませんでした。

この時点で、スレッド間で物事を移動した方法に応じて、アプリがハングするか (主にメイン スレッドで操作している場合)、スレッドが原因で CollectionChanged イベントが失敗します。

アプリがハングすると、接続するデバッガーによると、Invoke から呼び出されて待機状態になります。

ああ、私はさまざまな Invoke を BeginInvoke に変更しようとしました。

要約すると、次の 2 つの質問のいずれかに対する回答が必要です。

  1. Invoke がハングするように UI スレッドを待機モードにするのは何ですか?
  2. これに使用するより良い ObservableCollection 派生クラスはありますか?

ご検討いただきありがとうございます。

アップデート

うーん、この質問を削除して最初からやり直すかどうかはわかりません。問題は、ReportEntry をフィルター処理するために使用していた ListCollectionView に関連しているようです。私のFileViewModelには

次のように初期化します。

FilteredReports を削除すると、ハングすることはなくなりました。面倒なことに、このビューを ItemsSource として使用している DataGrid は DataTemplate にあるため、フィルターをビューに移動することも簡単ではありません。では、コレクションの更新時に ListCollectionView が停止する理由はありますか?

0 投票する
1 に答える
1688 参照

c# - Try - Catch内からDispatcherTimerを停止するには?

最初の試みが失敗した後、WPF DispatcherTimerMethodOne()のイベントハンドラー内での実行の試みを停止する方法を理解するのを手伝ってください。dispatcherTimer.Tick

ロックを設定するか、タイマーを停止したいのですが、それをしようとすると、Try-Catch 構造内から他のコードが見えるという問題に直面し、それを正しく克服する方法がわかりません。

0 投票する
1 に答える
323 参照

wpf - WPF:いつ Dispatcher.BeginInvoke を呼び出す必要がありますか?

Dispatcher.BeginInvokeバックグラウンド スレッドで GUI を更新するときはいつでも、これが必要であることはわかっています。しかし、それが必要かどうかを実行時にどのように判断すればよいでしょうか?

0 投票する
1 に答える
996 参照

struts2 - Struts 2 ディスパッチャ

(Struts2 で) プロパティ (ファイルからのデータ読み込み) を 1 回だけ初期化し、Struts 2 アプリケーション全体でそのプロパティを使用できるようにしたいと考えています。どうすればそれを達成できますか? struts 2ディスパッチャをオーバーライドする必要がありますか?

よろしくラジュ

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

c# - ObserveOnDispatcher を使用した単体テスト

次のように、ビューモデルにいくつかのコードがあります。

次に、私のテストでは、次のようにサービスを「モック」しています。

問題は、ObserveOnDispatcher が原因で、サブスクライブ デリゲートが実行されないことです。

DispatcherFrame と PushFrame を使用したコードを見たことがありますが、問題は「どこで」わからないことです。呼び出すことができます

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

c# - C#、WPF、Dispatcherを自動的に呼び出します。必要に応じて呼び出しますか?

ジオスペースマップが埋め込まれたプログラムがあります。マップのイベント処理は、マップの応答性を維持するために別のスレッドで処理されます(たとえば、マップがクリックされたときに発生するイベント)。

私が抱えている問題は、マップがイベントを発生させたときに、プログラムがGUI内のいくつかのものを更新し、マップに写真を配置するためにマップにコールバックする必要があることです。

イベントハンドラーメソッド全体をthis.Dispatcher.Invokeでラップしてみました。これにより、メインUIスレッドに戻ります。これはGUIの更新には最適ですが、マップにコールバックしても、まだUIスレッドを使用しているため、マップに問題が発生する可能性があります。

基本的に、これを機能させるには、GUIのコントロールを変更するたびにdispatcher.invokeを実行する必要があります。各呼び出しをdispatcher.invokeでラップせずに、これを自動的に実行できる方法はありますか?これがすべて理にかなっていることを願っています。

これが私が話しているイベントのサンプルコードです。

0 投票する
1 に答える
2385 参照

multithreading - スレッド 101: Dispatcher とは?

むかしむかし、私はこのことを暗記していました。時間が経つにつれて、私の理解は希薄になり、それをリフレッシュするつもりです.

思い出すと、いわゆるシングル スレッド アプリケーションには 2 つのスレッドがあります。

a) メインまたは DllMain エントリ ポイントへのポインタを持つプライマリ スレッド。と

b) いくつかの UI、UI スレッド、別名、WndProc が実行されるセカンダリ スレッド、つまり、Windows がポストするメッセージを受信する WndProc を実行するスレッドを持つアプリケーションの場合。つまり、Windows メッセージ ループを実行するスレッドです。

UI アプリの場合、プライマリ スレッドは Windows からのメッセージを待機しているブロック状態にあります。それらを受信すると、それらをキューに入れ、メッセージ ループ (WndProc) にディスパッチし、UI スレッドが開始されます。

私の理解によると、ブロッキング状態にあるプライマリスレッドは次のとおりです。

C++

C# または VB.NET WinForms アプリ:

これは彼らがディスパッチャーと呼んでいるものですか?

私の質問は次のとおりです。

a) 上記の理解は正しいですか?

b) Dispatcher とはいったい何者なのか?

c) Windows/Win32 の観点からスレッドをよりよく理解し、それを C# などの高水準言語と結びつけることができるリソースを教えてください。Petzold は、彼の壮大な作品の主題に関する彼の議論で控えめです。

私はそれがある程度正しいと信じていますが、確認は安心します.

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

wpf - WPFディスパッチャー、バックグラウンドワーカー、そして多くの苦痛

これは本当に簡単かもしれませんが、私が試したものはすべてレンガの壁にぶつかったようです。

WPFフォームにバインドされている2つのプロパティを持つビューモデルがあります。

Outlookからいくつかの新しい保留中のアイテムをフェッチするために呼び出すメソッドがありますが、フォーム(回転するプログレスバー)にある種の進行状況を表示するものもあり、進行状況バーの可視性はViewModelのIsWorkingプロパティにバインドされています。グリッドはPendingItemsコレクションにバインドされています。

IsWorkingをtrueに設定して、UIに進行状況バーを表示し、作業をバックグラウンドで実行し、終了後にIsWorkingをfalseに設定して、進行状況バーが消えるようにしたいと思います。

私は次のようなbackgroudworkerを作成しました:

これで、worker_DoWorkは、保留中のアイテムをフェッチしてそれらをPendingItemsコレクションに追加するメソッドを呼び出します。すべてがバックグラウンドで実行され、UIは引き続き応答しますが、コレクションに追加しようとすると、通常のクロススレッドエラーが発生します。コレクションを変更するコードをディスパッチャー呼び出しでラップしました。

ただし、それでも同じクロススレッドエラーがスローされます。

私は糸脱毛があまり得意ではないので、何が間違っているのかわかりません。誰かがこれを手に入れてくれるでしょうか?