問題タブ [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.
javascript - Javascriptディスパッチイベント
私はFlashを頻繁に使用しており、クラスはEventDispatcher
クラスを使用しており、クラスのカスタムイベントを定義できます。JavaScriptでこれを行うにはどうすればよいですか。
私はこのようなことをしたいと思います:
これはJavaScriptでどのように可能ですか?
php - Zend FrameworkでpreDispatch転送を行うには?
コントローラーごとにユーザーがログインしているかどうかを確認してから使用_forward()
したい。preDispatch
シナリオは非常に簡単です。ユーザーがログインしていない場合loginAction
、同じコントローラーまたは別のコントローラーに転送する必要があります。
これにより、ディスパッチ プロセスが最初からやり直し、再度呼び出しpreDispatch
、転送がすべてをやり直すため、無限ループが発生します。
私が思いついた唯一の解決策はloginAction
、がリクエストにすでに設定されているかどうかを確認することでした。
私の質問は、洗練された開発者はこの問題をどのように処理するのでしょうか?
更新
送信ボタンを押した直後に、聖なる意識の幽霊が出てきました;) 別のアイデアはLoginController
、ログイン要求を処理するために を構築することです。それとももっと良い方法がありますか?
c# - WPF: ある Dispatcher から別の Dispatcher に凍結不可能なアイテムを転送する
XPS ドキュメントから FixedPage オブジェクトを読み込み、処理して表示します。次のコードは、パッケージから FixedPage を読み込みます。
ただし、その XamlReader.Load() 呼び出しには時間がかかり (特に複雑な FixedPages の場合)、UI がブロックされることがあります。独自の Dispatcher を使用して別のスレッドでこれを行うこともできますが、FixedPage クラスは freeazable ではないため、メインの UI スレッドでは使用できません。
これを回避する方法はありますか?現在、BitmapSource は Freezable であるため、RenderTargetBitmap を使用して FixedPages を画像としてレンダリングする作業に行き詰まっています。
.net - UIディスパッチャーをViewModelに渡す方法
ビューに属するディスパッチャーにアクセスできるはずです。ビューモデルに渡す必要があります。しかし、ビューはViewModelについて何も知らないはずなので、どのように渡しますか?インターフェイスを導入するか、インスタンスに渡す代わりに、ビューによって書き込まれるグローバルディスパッチャーシングルトンを作成しますか?MVVMアプリケーションとフレームワークでこれをどのように解決しますか?
Dispatcher.Current
編集:私のViewModelsはバックグラウンドスレッドで作成される可能性があるため、ViewModelのコンストラクターで作成することはできないことに注意してください。
.net - WPF の UI スレッドで物事が確実に実行されるようにする
私はWPFアプリケーションを構築しています。サーバー側と非同期通信を行っており、クライアントの Prism でイベント集約を使用しています。これらの両方により、UI スレッドではない新しいスレッドが生成されます。これらのコールバックおよびイベント ハンドラー スレッドで "WPF 操作" を実行しようとすると、世界がバラバラになります。
最初に、サーバーからのコールバックでいくつかの WPF オブジェクトを作成しようとして問題に遭遇しました。スレッドは STA モードで実行する必要があると言われました。今、Prism イベント ハンドラーでいくつかの UI データを更新しようとしていますが、次のように言われました。
別のスレッドがこのスレッドを所有しているため、呼び出し元はこのスレッドにアクセスできません。
そう; WPF で物事を正しく行うための鍵は何ですか? この MSDN の投稿で WPF Dispatcher について調べました。私はそれを理解し始めていますが、私はまだ魔法使いではありません.
- UIスレッドで呼び出されるかどうかわからない何かを実行する必要がある場合、常に Dispatcher.Invoke を使用することが重要ですか?
- それが実際に UI スレッドで呼び出されたかどうかは重要ですか? とにかく Dispatcher.Invoke を実行しますか?
- Dispatcher.Invoke = 同期的に。Dispathcher.BeginInvoke = 非同期?
- Dispatcher.Invoke は UI スレッドを要求し、停止して待機しますか? それは悪い習慣であり、反応の悪いプログラムのリスクですか?
- とにかくディスパッチャーを取得するにはどうすればよいですか?Dispatcher.CurrentDispatcher は常に UI スレッドを表すディスパッチャを提供しますか?
- 複数の Dispatcher が存在しますか、それとも "Dispatcher" は基本的にアプリケーションの UI スレッドと同じですか?
- そして、BackgroundWorker との取引は何ですか? 代わりにいつこれを使用しますか? これは常に非同期だと思いますか?
- UI スレッドで (Invoked によって) 実行されるものはすべて STA アパートメント モードで実行されますか? つまり、STA モードで実行する必要がある場合、Dispatcher.Invoke で十分でしょうか?
私のために物事を明確にしたい人はいますか?関連する推奨事項などはありますか?ありがとう!
.net - WPF UIスレッドを使用すると、常にSTAアパートメントモードが保証されますよね?
私のWPFアプリケーションでは、サーバーと非同期で通信します。したがって、コールバックはUIスレッドで実行されません。そこで、いくつかのWPF処理(InkPresenterオブジェクトの作成)を行う必要があるため、UIスレッドで実行する必要があります。実際の要件は、STAアパートメントモードのスレッドで実行することです。STAモードで新しいスレッドを作成しようとしましたが、「別のスレッドが所有している」ため、UIスレッドがInkPresenterにアクセスできませんでした。
コールバックで実行したいのは、ディスパッチャーを使用して、STAを必要とする関数を呼び出すことです。これは正しいアプローチのように聞こえますか?私は今これをします、しかしそれはまだ失敗します。コールバック関数で次の関数をトリガーします。これにより、アドレス指定された関数がUIスレッドで実行されるようになります。
サンプルからわかるように、CheckAccess()を使用して、UIスレッドでまだ実行されていない場合にのみ関数を呼び出すようにします。私のコールバックがこの関数を呼び出すとき、CheckAccess()は常にtrueですが、Dispatcher.CurrentDispatcher.Thread.ApartmentState
MTAです。なんで?CheckAccess()を削除して常にInvokeを実行しようとしましたが、ApartmentStateはMTAのままであり、InkPresenterの作成は失敗します。
ここで私が間違っていることを誰かに説明してもらえますか?間違ったディスパッチャーか何かを持っていますか?これは、UIスレッドで何かが実行されるようにするための正しいアプローチですか?
silverlight - Silverlight タイマーの問題
カスタム アニメーションを使用して Silverlight アプリケーションを開発しています。変数 animationCounter を 1 ミリ秒ごとに更新して、1 秒で値が 1000 になるようにします。DispatcherTimer と System.Threading.Timer を試しました。こちらです:
(...)
System.Threading.Timer を使用
どちらも 1 秒間に AnimationCounter を 100 前後に設定しています。1000 のはずです。理由はわかりません。私が欠けているものはありますか?
ありがとう
c# - ViewModelオブジェクトにDispatcherを保持させることは悪い習慣と見なされますか?
私のWPFアプリケーションは、MVVMパターンを使用して構造化されています。ViewModelsはサーバーと非同期で通信し、要求されたデータが返されると、ViewModelのコールバックがトリガーされ、このデータを処理します。これは、UIスレッドではないスレッドで実行されます。これらのコールバックには、UIスレッドで実行する必要のある作業が含まれることがあるため、ディスパッチャーが必要です。これは次のようなものである可能性があります。
- ObservableCollectionへのデータの追加
- GUIに表示するものを設定するPrismコマンドをトリガーします
- ある種のWPFオブジェクトを作成します。
私は後者を避けようとしますが、ここでの最初の2つのポイントは、ViewModelsが行うのに合理的なことであることがわかります。それで; ViewModelsにディスパッチャーを保持させてUIスレッドのコマンドを呼び出すことができるようにしても大丈夫ですか?それとも、これは悪い習慣と見なされますか?なぜ?
c# - NunitでWPFディスパッチャーを呼び出す方法は?
データフィールド値を使用してテキストブロックをレンダリングするアプリケーションをテストしたいと思います。レンダリングが完了したら、実際の幅と実際の高さを取得したいと思います。すべてが正常に動作します。アプリケーションをテストしようとしたときに、問題が最初に発生しました。テストプロジェクトからディスパッチャを呼び出すことができません。
以下はコードです。
NUnitを使い始めたばかりです。だから、私を助けてください。
ありがとう
c# - スレッドで適切な WPF ディスパッチャを取得する
オブジェクトのコンストラクターで、WPF mediaElement オブジェクトを作成する必要があります。
しかし、クラスは他のスレッドからインスタンス化することもできるので、使用する必要があります
しかし、そのコンストラクターで適切なディスパッチャーインスタンスを取得するにはどうすればよいですか:s