問題タブ [dispatchertimer]
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 - ストップウォッチが止まらない
マウスでクリックしたときに、ユーザーがシングルクリックまたはダブルクリックするかどうかを制御したいと思います。だから私はこのコードを使用します:
_dt は、ビュー モデルのコンストラクターで作成される DispatcherTimer です。
ただし、ディスパッチャーは停止していないため、ワンクリックのコードは常に実行されます。
どうして?。
ありがとう。
編集:ボタンのaxmlを含めます:
wpf - システムが作業を再開した後、WPF DispatcherTimer が例外をスローする
次のような DispatchTimer を作成するとします。
これで、システムがスリープ状態になるか、動作が停止します。システムが作業を再開した後、コードによって NullPointerException がスローされます。これを避けるために、私はイベントに登録しますSystemEvents.PowerModeChanged += SystemEventsOnPowerModeChanged;
次のコードを使用します。
しかし、これでは問題は解決しません。「UpdateTimerOnTick」メソッドが null であるという例外が呼び出されます。この動作を防ぐ方法はありますか?
c# - 多数のオブジェクト (1,000 以上) をリアルタイムで更新する最も効率的な方法
多数のアイテム (1,000 以上) を持つコレクションを反復処理し、アイテムのプロパティをリアルタイムで更新する最も効率的な方法は何でしょうか? 現時点では、私のプログラムはキャンバス上のコレクション内の各オブジェクトの画像を描画しWriteableBitmap
(ただし、単純な楕円とのパフォーマンスの違いは見られません)、画面上で移動します。当分の間、ロジックをできるだけシンプルに保つようにしています。
(上記の Entity クラスでは、[Magic] 属性がすべてのプロパティに INPC を実装しています)
System.Timers.Timer
、System.Threading.Timer
、およびSystem.Threading.DispatcherTimer
を使用して、さまざまな間隔でループを作成しようとしました。コレクション内の約 800 個のオブジェクトに到達するまでは、すべてがかなりうまく動作し、その後、途切れ途切れになり始めます。また、標準foreach
ループとループを使用してみParallel.ForEach
ましたが、2 つの違いに実際には気づいていません。私のループにはもっと複雑なロジックがありましたが、プロセスを合理化する方法がわかるまで、できるだけシンプルにしました。
(また、これは Canvas の問題ではありません。10 個のアイテムを描画し、1,000 個のアイテムを画像なしで作成すると、それでも途切れ途切れになります。)
プログラムで大規模なコレクションをより効率的にリアルタイムで処理するにはどうすればよいですか? このような性質のものを扱ったのはこれが初めてなので、見逃している部分がかなりあると思います。アドバイスをいただければ幸いです。
c# - BackgroundWorker e.Result の結果、呼び出しスレッドはエラーにアクセスできません
BackgroundWorker と DispatcherTimer に関連する SO の質問をたくさん読み、メイン スレッド以外のスレッドでは UI コンポーネントにアクセスできないことを理解しました。
だから私は 1/2 秒ごとに刻む DispatcherTimer を持っています。ご想像のとおり、ビュー モデル クラスと、直接操作が必要なすべての UI 要素を更新でき、UI は非常に応答性が高くなります。ただし、実行に約 3 秒かかる UI の値に基づいて計算する必要があります。
DispatcherTimer スレッドで計算を実行しようとしましたが、完了するまで UI をロック/ブロックしました。現在、DispatcherTimer にチェックがあり、BackgroundWorker スレッドをトリガーして計算を実行します。e.Arguments を使用して、3 秒の計算プロセスに必要なデータを渡し、e.Result を取得した完成データに渡します。
結果を確認しましたが、エラーは発生していません。ただし、e.Result をクラスにキャストし直すと、e.Result は適切に評価できません。クラスプロパティを使用するようになると、本質的に「呼び出しスレッドはエラーにアクセスできません」というメッセージが表示されます。
"threadDrawMap_Completed" にブレークを設定し、PathGeometry のリストを評価すると、次のエラーが発生します: base {System.SystemException} = {"別のスレッドが所有しているため、呼び出しスレッドはこのオブジェクトにアクセスできません。"}
DrawUIMap メソッドに入って MyClass.MapGeo ジオメトリ リストにアクセスしようとするまで、実際にはエラーは表示されません。この時点で、UI にアクセスできる DispatcherTimer スレッドに戻ります。
私の知る限り、UI コンポーネントにいつどこでアクセスするかについては、すべて正しく行っています。私はどこかでひどく間違ったことをしたと思いますが。
**編集:これは計算を行うコードの一部です
c# - AudioPlaybackAgent のタイマー
を使用するインターネット ラジオ アプリがありますBackgroundAudioPlayer
。
インターネット ラジオ ステーションの API から取得された BAP の現在再生中のトラックのトラック タイトルを更新する Audio Playback Agent のタイマーが必要です。
オーディオ再生エージェントにa を追加するDispatcherTimer
と、クロススレッド例外が発生し、次を使用します。
うまくいきませんでした。
アプリ自体に更新コードを配置すると、ユーザーがアプリから離れたときに更新が停止するため、ここにコードが必要です (Windows 8 の動作とは大きく異なります)。
スケジュールされたエージェントは 30 分ごとに 1 回しか実行されない (IIRC) ため、使用できません。
これは可能ですか、それとも Windows Phone ではできませんか?