問題タブ [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.
c# - 独自のカスタム.NETイベント処理ループを実行する
数年前、.NETのデフォルトのイベント「ディスパッチャー」の実装を独自のプロセッサーでオーバーライドする方法を説明した本を読みました。
イベントが発生するたびに、myBar1ハンドラーとmyBar2ハンドラーの両方が呼び出されます。
私が思い出したように、このループのデフォルトの実装はリンクリストを使用し、リストを繰り返し処理して、EventHandlerデリゲートを順番に呼び出します。
私の質問は2つあります:
- 誰かが私が読んでいた本を知っていますか?
- なぜデフォルトの実装(本で答えられるかもしれない)をオーバーライドしたいのですか?
編集:私が参照していた本は確かにC#経由のジェフリー・リッチターのCLRでした
c# - DispatcherTimer が時間の経過とともに CPU を消費し、WPF ビジュアルが正しくレンダリングされない
DispatcherTimer を使用して時計の目盛りを更新する WPF アプリがあります。
ただし、アプリケーションを約 6 時間実行した後、時計の針の角度が変化しなくなりました。DispatcherTimer が Debug で引き続き起動し、角度値が更新されていることを確認しましたが、画面のレンダリングには変更が反映されません。
また、WPPFerf ツールの Visual Profiler を使用して、Unlabeled Time、Tick (Time Manager)、および AnimatedRenderMessageHandler(Media Content) がすべて CPU のほぼ 80% を消費するまで徐々に増加していることを確認しましたが、メモリは安定して動作しています。
hHandRT.Angle は RotateTransform への参照です
このコードは、約 5 時間の連続実行で完全に機能しますが、その後は遅延し、角度の変更が画面に表示されません。この問題のトラブルシューティング方法に関する提案、またはあなたが知っている可能性のある解決策。
.NET 3.5、Windows Vista SP1 または Windows XP SP3 (どちらも同じ動作を示します)
編集:クロックティック機能の追加
クロックティックであまりにも多くのことが起こっていることに沿って、私は現在、この調整が役立つかどうかを確認しようとしています. 残念ながら、バグが現れるまでに 5 時間かかります :(
c# - カウントダウンタイマーの後に遅延を追加するにはどうすればよいですか
DispatcherTimer
カメラでリリースをトリガーする前に、カウントダウンを実行するためにを使用しています。このUpdateCountdown
メソッドは、カメラが起動する前にユーザーに表示される画像を変更するために使用されます。メソッドをすぐに実行するのではなくTakePicture
、カウンターがゼロに達して最後の画像が表示された後、少し遅らせたいと思います。
以下に示すコードでは、その時点で一時停止が発生し_countdown = 1
ます。最終的な画像が表示され、TakePicture()
ほぼ同時に起動します(最初に発生すると思いますTakePicture
)。
タイミングで考慮していないことは何ですか?
silverlight - 非同期呼び出しと組み合わせてディスパッチャータイマーを使用する
WCF と Entity Framework を使用する Silverlight アプリケーションに問題があり、ユーザーが Silverlight アプリケーションを閉じる代わりに Web ページまたはブラウザーを閉じてアプリケーションをシャットダウンするたびに、イベントをトラップする必要があります。これは、変更が行われたかどうかを確認するためです。変更があった場合は、ユーザーが終了する前に保存するかどうかを尋ねます。
Web ページのクローズをトラップするという部分を達成することができました。Web ページが Silverlight アプリケーション オブジェクトのメソッドを呼び出すようにするコードをアプリケーション オブジェクトに記述しました。問題は、このメソッドで、Web サービスへの非同期呼び出しを行って、変更が発生したかどうか (IsDirty) を確認するときに始まります。DispatcherTimer を使用して、非同期呼び出しの戻りを確認しています。問題は、この新しい機能を追加する前は正常に動作していた非同期呼び出しが完了しないことです (デバッグ モードでは、_BfrServ_Customer_IsDirtyCompleted メソッドにステップ インすることはありません)。
以下に、使用しているコードを示します。
非同期呼び出しと組み合わせてタイマーを作成するのは初めてなので、何か間違っている可能性がありますが、何がわかりません。他のことも試しましたが、成功しませんでした..
====================== コード ========================== ===================
c# - DispatcherTimerと高いCPU負荷
ねえ、私はWPFアプリケーションを持っていて、DispatcherTimerを使用して毎分イベントを発生させています。アプリを実行すると、CPUの負荷が100%にジャンプします。タイマーを使用せずにアプリをコンパイルしようとしましたが、CPUの負荷が予想どおりに非常に低かった。
サンプルコード:
そのコードがないと、CPUの負荷は低くなります。これを引き起こす原因は何ですか?
アップデート 他のタイマーを使用できますか?精度は重要ではありません。
wpf - DispatcherTimer EventHandler によりメモリに保持される WPF コントロール
ヨ
私の WPF コントロールの 1 つは、プライベート メンバーの 1 つが原因でメモリに保持されます。有罪のメンバーは DispatcherTimer であり、保持は Tick イベント ハンドラーによるものです。(このリークは、ANTS Memory Profiler ツールの助けを借りて検出されました)
明らかに、ロード/アンロード時にハンドラーを設定/削除します。そして、コントロールはアンロードされます...
しかし、それでも私はその問題に悩まされています(私のコントロールがメモリに詰まっているのと同じです)。任意のアイデア、THX
c# - ReportProgress の実行時に BackgroundWorker または (Dispatcher) 操作は既に完了しています
DispatcherTimer
数分ごとに操作を行う必要があるため、使用します。この中で a を呼び出しBackgroundWorker
て作業を行い、タイマーにアタッチされたディスパッチャーを使用して UI を更新します。発生しているエラーはタイマーに関係していると思いますが、よくわかりません。ディスパッチャは完了していますか、それともバックグラウンドワーカーですか? foreach 内で ReportProgress を実行するにはどうすればよいですか?
エラー:
この操作ではすでに OperationCompleted が呼び出されており、それ以上の呼び出しは無効です。
これを行うとき:
これが簡略化されたものです:
編集: スタックトレース:
c# - DispatchTimerを使用して経過時間を1ミリ秒の精度で取得する
ディスパッチタイマーを使用してキー押下イベント間の経過時間をミリ秒単位で測定しようとしていますが、ディスパッチタイマーの間隔を1ミリ秒と宣言してからティックイベントを確立すると、1ミリ秒ごとに起動するのではなく、10のようになります。 100ミリ秒(推測)。このティックイベントが時間どおりに発生しない場合、ミリ秒単位で時間を正確に測定するにはどうすればよいですか?System.Timersにアクセスできないように見えるSilverlightでこれを行っています。System.Threading.Timerでも同じことが起こるようです。
コードの基本は次のとおりです。
何か案は?
c# - C# Silverlight での DispatcherTimer と UI 更新の制限
繰り返しますが、皆さんにとって簡単な質問かもしれません。Silverlight の舞台裏で行われていることについて、私はあまり理解していません。
ポイントを追加および削除して、20 ミリ秒ごとに更新されるローリング スコープとして使用するグラフ作成アプリ (Visiblox) があります。擬似コード:
このチャート作成ツールで 6 シリーズを実行すると、少し遅くなり始めました。ティックを 10ms に変更しても何の違いもありませんでした。チャートは同じ速度で更新されたので、20ms が速度制限 (UI またはチャート?) のようです。
で試してみたCompositionTarget.Rendering
ところ、同じ結果が得られました。20ms 以下では、速度に違いはありませんでした。
その後、誤って両方を有効にして速度が 2 倍になりました。そこで、複数のスレッド (2、3、4) でテストし、速度を 2 倍、3 倍、4 倍にしました。ロックを生成する必要があるプロセスがわからないため、これにはまだロックがありませんが、データの破損やメモリリークはありません。
私が持っている質問は、なぜ 20 ミリ秒で遅いチャートが 10 ミリ秒で実行できないのに、マルチスレッド化すると途方もなく高速になるのかということです。UI の更新プロセスは高速化されていますか? チャートの計算は 2 倍になりますか? または、単一の DispatcherTimer を実行できる速度に制限はありますか?
ありがとう!
編集:私は組み込みコーディングのバックグラウンドを持っているので、スレッドとタイミングについて考えると、すぐにハードウェアのピンを切り替えてスコープを接続してプロセスの長さを測定することを考えます。私は C# のスレッドが初めてで、スコープを接続するためのピンがありません。スレッドのタイミングをグラフィカルに表示する方法はありますか?
c# - このタイマーはメモリから解放されますか?
C# で次の関数のペアを検討してください。
func1() を 1 回呼び出した後、スコープが func1() に制限されているため、タイマーへの参照が失われますが、それ以降は 5 秒ごとに func2() が呼び出されます。つまり、 func1() が呼び出された後も、タイマーは明らかにメモリ内にあり、その機能を実行しています。私の質問は、これを func2() に追加した場合です。
タイマーはすぐにガベージコレクションによって取得されますか、それともプログラムが終了するまでメモリに残りますか? メモリに残っている場合、コレクション用に手動でマークするにはどうすればよいですか (または同様のことを行う)?
私が持っている二次的な質問 (答えたいと思われる場合) は、通常のタイマーがこの状況でまったく同じ動作をするかどうか、または知っておくべき大きな違いがあるかどうかです。
ありがとう!