私のWPFアプリケーションにはいくつかのタイマーが関係します。すべてDispatcherTimersで動作しますが、遅延は巨大でフリーズが頻繁に発生します(たとえば、3秒のフリーズ、その後の3秒の一時停止など)。複数のタイマーWPFアプリケーション、呼び出しスレッドはSTAエラーである必要があります。エラー
私の問題は、この問題を回避するためにアプリケーションをどのように再設計する必要があるのかよく分かりません。これまでのスレッドと、初めての実際のWPFアプリケーションでは、決して作業しませんでした。
次のエラーが発生します。 多くのUIコンポーネントでこれが必要なため、呼び出しスレッドはSTAである必要があります。
私は名前空間System.Timersからタイマーによって私のディスパッチャタイマーを置き換えることで、このエラーを得た
ディスパッチャタイマー付き旧コード:タイマー付き
timerW = new DispatcherTimer();
timerW.Tick += new EventHandler(timerW_Tick);
timerW.Interval = new TimeSpan(0, 0, 5000);
timerW.Start();
新コード:
timerW = new Timer();
timerW.Elapsed += new ElapsedEventHandler(timerW_Tick);
timerW.Interval = 5000;
timerW.Start();
クエリは5秒ごとに実行され、日付の値を取得します。特定の条件を満たすと、動的にボタンが作成されます。たとえば、の場合、日付が3分間同じ場合、ボタンが作成されます。
ダイナミック作成したボタンが含まれています:データベース
- 日。このタイマーは、新しいボタンが作成されたときに停止します。これにより、停止時間が記録されます。ダウンタイム
ため
ボタンの部分は私のプログラムですべての対話がある場所です。残りのインターフェイスはデータベースの情報を表示します。ボタンは、左右のナビゲーションボタンを使用したコントロールのようなカスタムのスライダに配置されます。
私のプログラムには3種類のディスパッチャータイマーがあります。
- 現在時刻を表示するためのSQLクエリを実行し、内部ダウンタイムタイマーを毎秒を更新する毎に5秒に
- つの日付の値を取得する(HH:SS形式:MM)
- ワン動的なカスタムスタイルのWPFボタン。私はその間にダウンタイムを記録するためにストップウォッチを使用します。
だから、私はトレッドおよび/またはBackgroundWorkerので作業する必要があるようですか?
私は実際にこれで始まる方法はわかりません。なぜなら、私はかなりの時間がかかりません。いくつかのサンプルコードは大歓迎です。
Tldr:
私は次のような理由のためにタイマーを使用します。
- を表示し、現在の時刻
- 録音の停止時間(リアルタイムので、私は実際にそれが第二のカウントを参照)
- 5秒ごとに実行されるSQLクエリ。
EDIT:
public void InitializeDispatcherTimerW()
{
TimerCallback callback = MyTimerCallBack;
timerWegingen = new Timer(callback, null, 0, 5000);
timerWegingen.Change(0, 5000);
}
private void MyTimerCallBack(object state)
{
DisplayWegingInfo();
CaculateTimeBetweenWegingen();
}
敬具、 Jackz。
スレッドタイマーを使用しているときにtickメソッドを宣言しようとすると、エラーが発生しているようです。 – Jackz
Tickイベント/メソッドはありません。どういう意味ですか? –
私はx秒ごとに特定のメソッドを実行することを意味します。このようなタイマーでこれをどうすればいいのですか? – Jackz