問題タブ [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.
wpf - WPFディスパッチャータイマーティックがアプリケーションをフリーズする
WPFディスパッチャータイマーの使用に少し問題があります。タイマーティックごとに、アプリケーションが一時的にフリーズします(タイマーティックメソッドが終了するまで)。これは私のコードです:
これを回避してアプリケーションをスムーズに実行する方法はありますか?
.net - スレッドでWPFポップアップウィンドウを作成するときの「多くのUIコンポーネントがこれを必要とするため、呼び出し元のスレッドはSTAである必要があります」エラー
スレッドが値をチェックするWPFアプリケーションがあります。場合によっては、メッセージを表示するためにポップアップWindow
を表示します。スレッドでこのポップアップウィンドウを作成すると、ポップアップウィンドウのコンストラクターによって例外がスローされます。
「多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAである必要があります。」
このエラーを解決するにはどうすればよいですか?
これは、ポップアップウィンドウを作成するための私のコードです。
wpf - UIスレッドのディスパッチャーを取得するにはどうすればよいですか?
Dispatcher
UI要素への参照がないときにUIスレッドを取得する方法はありますか?
wpf - WPF - ディスパッチャー PushFrame()
いくつかの異なるスレッドから Dispatcher.PushFrame() を呼び出そうとしていますが、エラーが発生します:
DependencyObject と同じ Thread に DependencySource を作成する必要があります。
コード スニペットを次に示します。
私が試したとき:
エラーが発生します:
オブジェクトは同じスレッドで作成する必要があります。
複数のフレームを異なるスレッドから Dispatcher にプッシュする方法は何ですか?
wpf - WPF バックグラウンド スレッドの呼び出し
Winforms がどのように機能するかを間違って覚えているか、これを複雑にしすぎているのかもしれませんが、ここに私の問題があります。
WCF 経由でサーバーと通信する WPF クライアント アプリ アプリケーションがあります。現在のユーザーは WPF クライアントから「ログアウト」することができます。これにより、開いているすべての画面が閉じられ、ナビゲーション ペインだけが残り、プログラム ウィンドウが最小化されます。ユーザーがプログラム ウィンドウを再度最大化すると、ログインするように求められます。簡単です。
ただし、5 分ごとにクライアントが WCF 呼び出しを実行して、キャッシュされたデータを更新しようとするなど、バックグラウンド スレッドで状況が発生することがあります。この 5 分間のタイマーがトリガーされたときにユーザーがログアウトした場合はどうなるでしょうか。さて、ユーザーは再度ログインするように求められるはずです...もちろん、これはUIスレッドで発生する必要があります。
ここまでは順調ですよね?しかし、複数のスレッドがこのコードのスポットにヒットするとどうなるでしょうか?
まあ、私の最初の直感は、私は Application.Current.Dispatcher 全体で同期しているので、うまくいくはずであり、最初にヒットしたスレッドがログインフォームを表示し、ユーザーをログインさせる責任があるということでした...
そうではありません...
スレッド 1 はコードをヒットし、ログイン フォームで ShowDialog を呼び出します。
スレッド 2 もコードにヒットし、スレッド 1 が ShowDialog を呼び出すとすぐにログインを呼び出します。これは、ShowDialog を呼び出すとスレッド 1 のブロックが解除されたためです (WPF メッセージ ポンプの動作方法によると思います)。
...最終的な結果として、一度に複数のログインフォームがユーザーにポップアップ表示されます。
私が欲しいのは、ユーザーをアプリケーションに再度ログインさせる同期方法だけです...ここで何が欠けていますか?
前もって感謝します。
apache-flex - MainAppの状態変化をリッスンしていないコンポーネント
これが難しすぎるのか、簡単すぎるのかわかりません。私のカスタムコンポーネントは、StateChangeEvent.CURRENT_STATE_CHANGEを使用してメインアプリケーションの状態変化をリッスンしようとしていますが、それ自体の状態変化を報告しています。
どうすればこれができるのでしょうか?
c# - 複数の実行パスを実行する WPF ディスパッチャー
さて、週末に奇妙なものを見つけました。バックグラウンド作業を実行するためにいくつかのスレッドを生成する WPF アプリがあります。これらのバックグラウンド スレッドは、作業項目を同期コンテキストに投稿します。これは、1 つのケースを除いてすべて正常に機能しています。スレッドが終了すると、ポップアップ ウィンドウを開くアクションがディスパッチャにポストされることがあります。結局、2 つのスレッドが両方とも Dispatcher にアクションを投稿すると、1 つの処理が開始され、次に Window.ShowDialog(); でポップアップ ウィンドウを開くと、現在の実行パスは一時停止し、ダイアログ ボックスからのフィードバックを待つ必要があります。しかし、ダイアログ ボックスが開くと、Dispatcher がすぐに開始され、ポストされた 2 番目のアクションの実行が開始されるという問題が発生します。これにより、2 つのコード パスが実行されます。
私が話している動作を示すために、いくつかのサンプルコードを投稿しました。2 つのアクションを投稿し、最初のアクションがダイアログ ボックスを開くと、最初のアクションが完了するまで 2 番目のアクションは実行されません。
XAML は、Button_ClickWithout OnClick を呼び出すボタンを含む単なる Window です。ボタンを 2 回押して 3 秒間待つと、2 つのダイアログが交互にポップアップすることがわかります。最初のダイアログがポップアップし、閉じられると 2 番目のダイアログがポップアップします。
だから私の質問は: これはバグですか? または、これを軽減して、最初のアクションが Window.ShowDialog() で実行を停止したときに、一度に 1 つのアクションしか処理できないようにするにはどうすればよいですか?
ありがとう、ラウル
c# - DispatcherOperations.Wait()
dispatcherOperation.Wait()
既に完了した操作を呼び出すとどうなりますか? また、ドキュメントはそれが a を返すと言っていますが、それが完了するまで(おそらく)返されないのでDispatcherOperationStatus
、常にそうではないでしょうか?Completed
私はこのようにそれを使用しようとしていました:
私はこれを WPF で使用しているため、すべてのAdd
操作は UI スレッドで実行する必要がありますが、スレッドが切り替わるのを待たずに基本的にそれらをキューに入れ、Update()
読み取り操作の前に呼び出すだけで確実に実行できると考えました。リストは最新ですが、プログラムがハングし始めました。
c# - WPF:DispatcherからCollectionViewを変更してもエラーがスローされる
ユーザーが離れるたびに「画面」の観察可能なコレクションを変更する次のコードがあります。
これは、おそらくCollectionViewsに関連するスレッドの問題を乗り越えるために、クライアントのDispatcherへの呼び出しにラップされています。ただし、それでも次の例外が発生します。
このタイプのCollectionViewは、Dispatcherスレッドとは異なるスレッドからのSourceCollectionへの変更をサポートしていません。
上記のディスパッチャーは、次のようにWPFアプリケーションのMainViewModel(MVVMを使用しています)に設定されています。
c# - Silverlight 3 では、サイズ変更後に HtmlPage.Plugin.SetStyleAttribute() 呼び出しを呼び出して他のコードを呼び出すにはどうすればよいですか?
WriteableBitmap を使用して Silverlight コントロールのスナップショットを取得しようとしていますが、正常に動作しますが、表示されているもののスナップショットしか取得できません。Silverlight コントロールのサイズを変更して、すべてを表示してからスクリーンショットを撮ろうとしていますが、呼び出しがすべて実行された後のコードがスナップショット コードになるまで、コードはコントロールのサイズを変更しません...
他のコードがサイズ変更を引き起こした後、タイマーを使用してスナップショットを起動することでこの作業を行うことができますが、もっと良い方法があるかどうか疑問に思っています。HtmlPage.Plugin.SetStyleAttribute 呼び出しは UI スレッドから呼び出す必要があるため、そこに問題があると想定しています。コードの残りの部分はそうではなく、他のコードが最初に実行されている間に UI スレッドにディスパッチされているという事実。
新しいイベントを作成するか、呼び出しにアタッチして、いつ実行されたかを判断し、スナップショット コードを起動する方法はありますか?
次のコードがあります。
ありがとう、
ジョン