現在の時刻を表示するテキストブロックを持つWPFアプリがあります。このテキストブロックは、ViewModelのDependencyPropertyにバインドされています。当然のことながら、私は時間を更新し続ける必要があるので、私はそうのようなタイマー(System.Threading.Timer)を使用:タイマーコールバックがWPFアプリを閉じます(DispatcherTimerは動作します)
public MainViewModel()
{
_dateTimer = new Timer(_dateTimer_Tick, null, 0, 60000);
}
void _dateTimer_Tick(object sender)
{
Time = DateTime.Now.ToString("HH:mm");
Date = DateTime.Now.ToString("D");
}
ことですが、コールバックが呼び出され、アプリケーションが終了...残念(出力を「時間のDPに書き込もうとしているときに、「WindowsBase.dllでSystem.InvalidOperationExceptionが発生しました」という最初のチャンスの例外があります)。
DispatcherTimerを使用すると、すべて正常に動作します。私はDispatcherTimerを使用しても構いません。アプリがかなり大きくて、できる限りパフォーマンスを調整したいと思っています。私が見る限り、私はUIスレッドにアクセスしていません(私はただプロパティを更新しています)ので、DispatcherTimerは必要ありません。
何か不足していますか?
ありがとうございました。
EDIT: 特性は次のように定義される:
public string Time
{
get { return (string)GetValue(TimeProperty); }
set { SetValue(TimeProperty, value); }
}
// Using a DependencyProperty as the backing store for Time. This enables animation, styling, binding, etc...
public static readonly DependencyProperty TimeProperty =
DependencyProperty.Register("Time", typeof(string), typeof(MainViewModel), new UIPropertyMetadata(""));
日付と時刻のプロパティはどのように定義されていますか? –