問題タブ [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.

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

wpf - WPF アプリケーションに問題があり、GUI の応答が遅い

基本的にサーバーからデータを取得し、GUI にデータを表示する WPF アプリケーションを分析してきました。

このコードは私のものではなく、GUI からの応答が遅いことに関連する問題がアプリケーションにあるため、その問題の原因を突き止めようとしています。

問題が何であるかについての私の考えをあなたと共有したいと思います.

サーバーからデータを取得するために、アプリケーションは 7 つのスレッドを使用しています (これは主にアプリケーション ロジックが原因でこの方法で行われるため、1 つだけでなく 7 つであることにはあまり注意を払わないでください...)。各スレッドは、CreateThreadForTask() というメソッドを呼び出すことによって作成されます。

コードをデバッグしているときに、すべてのスレッドが DispatcherTimer を使用して作成されていることに気付きました。私が思うに、アプリケーションは 7 つの DispatcherTimer を作成し、タイマーの Tick イベントを RunMainSyncForTask() メソッドにリンクしています。このメソッドは内部でサーバーからデータを取得し、そのデータをローカル データベースに保存するバックグラウンド ワーカーを作成します。

さて、これはMSDNから取られました

DispatcherTimer は、すべての Dispatcher ループの先頭で再評価されます。

タイマーは、時間間隔が発生したときに正確に実行されることは保証されていませんが、時間間隔が発生する前に実行されないことは保証されています。これは、DispatcherTimer 操作が他の操作と同様に Dispatcher キューに置かれるためです。DispatcherTimer 操作が実行されるタイミングは、キュー内の他のジョブとその優先度に依存します。

したがって、これに基づいて、タイマーがティック イベントを実行するたびにアプリケーションがスレッドをスパム送信していると考えられます。これは同時に 7 回実行されます。DispatcherTimer の性質により、これらすべての操作が Dispatcher キューに追加されます。これにより、Dispatcher がビジー状態になるため、GUI の応答が遅くなります。

また、アプリケーションのもう 1 つの問題は、実行時に CPU の約 90 ~ 95% を使用することです。私の仮説が正しければ、これもこの問題の原因である可能性があると思います。

ですから、これについていくつかの内部を共有できれば、私はそれを感謝します.

ありがとう。

0 投票する
6 に答える
19579 参照

c# - DispatcherTimerがTickイベントを発生させない

私は次のように初期化したDispatcherTimerを持っています:

_timer_Tickイベントが発生することはありませんが、何か見落としたことはありますか?

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

silverlight - MVVMでSilverlightビューを定期的に更新します

SilverlightでMVVMを使用しようとしていますが、まったく新しいので、いくつかの点についてはよくわかりません。サーバー側の操作の進行状況を表示するSilverlightページがあります。現在の進捗状況はWebサービスからのものであり、数秒ごとに更新する必要があります(議論のために10秒としましょう)。

これを実装するための最良の方法は何ですか?私が考えることができたオプションは次のとおりでした:

  1. ViewModelのInitalizeメソッドでDispatcherTimerを初期化し、DispatcherTimerイベントからビューを更新します(タイマーの詳細をViewModelに入れます)

  2. DispatcherTimer(PeriodicCommandExecutorなど)の周りにラッパーを作成します。これは、ViewModelのRefreshコマンドにバインドするコマンドプロパティを使用して、WindowsFormsのタイマーコントロールと同様のコントロールまたはリソースになります(タイマーの詳細をビューに配置します)

2番目のオプションが好ましいと思います。これは、ViewModelのテストが容易になり、DispatcherTimerがViewModelに適切に望まないUI実装の詳細であるためです。同意しますか?

はいの場合、そのようなラッパーをどのように作成しますか。プロパティがアタッチされたDependencyObjectの実行を開始しましたが、Intervalなどのプロパティ値を内部のDispatcherTimerに転送する方法がわかりません。依存関係のプロパティが変更され、DispatcherTimerがDependencyObjectでない場合、Silverlightはイベントを提供しないようです。そのため、そのプロパティに直接データバインドすることはできません。

ありがとう!

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

c# - DispatcherTimerおよびWebClient.DownloadStringAsyncは、「WebClientは同時I/O操作をサポートしていません」という例外をスローします。

このコードについてサポートが必要です

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

c# - 同時に2つのdispatchertimerイベント?

あるディスパッチャータイマーで日付/時刻を更新する wpf アプリがあります。もう 1 つは、再生時間の時間とスライドバーを追跡する mp3 プレーヤー タイマー用です。2 つのディスパッチャータイマーを実行することは可能ですか?

それとdispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick); _dispatcherTimer.Tick += new EventHandler(mp3Timer_Tick);

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

silverlight - アイドル状態検出Silverlight4アプリケーション

Silverlightアプリケーションのアイドル状態を検出するための最良の方法は何ですか?私はこれまでにネット上でかなりの数の記事を読みましたが、通常はwpf/モバイルアプリなどを対象としています。

5分後に画面をロックするDispatcherTimerを作成しましたが、すべての画面のすべてのウィジェットに移動し(アプリケーションには、約4〜5の画面があります)、このタイマーをリセットするには、mousebuttondownまたはmouseenterイベントハンドラーを追加する必要があるようです。これは効率的ではないようですが、layrootにハンドラーを追加するだけでも役に立ちません。

役立つ提案はありますか?

ありがとう

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

c# - Win 2k8 SP2 で DispatcherTimer が Stop() 後に起動し続ける

今日、興味深いバグレポートを受け取りました。

Tick が Stop() メソッド呼び出しを含む EventHandler を呼び出す DispatcherTimer があります。これにより、開発で使用するプラットフォーム (Windows XP SP3 および Windows 7) でタイマーが停止しますが、Windows Server 2008 SP2 マシンで実行するとタイマーが停止しないようです。

これは .NET 3.5 プロジェクトです。

これは Win 2k8 の System.Windows.Threading の既知のバグなのか、コードで何か間違ったことをしているのだろうかと思っています。

コードの関連部分は次のとおりです。

よろしくお願いします!

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

c# - DispatcherTimer を使用した C# WPF タイマー (ストップウォッチ)

シンプルなストップウォッチを作ろうとしていますが、うまくいきません。ボタンを押すとアプリがクラッシュします。どうしたの?

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

windows-phone-7 - WP7 アプリケーションでの DispatcherTimer の動作

WP7 用のオーディオ録音アプリケーションを作成しています。ViewModel クラスに DispatcherTimer オブジェクトがあり、記録が行われているときに経過秒数をカウントして、記録の長さをユーザーに表示します。アプリに次の問題があります。

DispatcherTimer のティック間隔は 1 秒 (1000) ミリ秒に設定されています。

開始ボタンを押すと、DispatcherTimer が開始されます。停止ボタンを押すと、DispatcherTimers スレッドが終了します。(すぐに!、そんなつもりじゃなかったと思った))

停止をすばやく (間に 1 秒未満) 押した後に開始ボタンを押すと、DispatcherTimer はまだ停止していないため、再起動に失敗します。(そのスレッドは終了していません)

基本的に、私の最大の懸念は、なぜ DispatcherTimer がティックの時間になるまで待たなければならず、それが停止したことを認識し、ティックを実行するために作成したスレッドを終了しなければならないのかということです。

この問題を回避するにはどうすればよいですか? ありがとうございました。

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

c# - observablecollection で 60 個の要素を維持する

こんにちは、毎分データを取得する ObservableCollection があります。1 時間に達したら、最初のアイテムをクリアしてすべてのアイテムを上に移動し、新しいアイテムを追加して 60 要素に維持したいと思います。誰もそうする方法を知っていますか?

これが私のコードです: