0


0

経過時間でTextBlockを更新すると、UnauthorizedAccessExceptionが発生します。

Silverlightには非常にシンプルなStopWatchアプリケーションがあります。 MainPage`クラスには次のプライベートプロパティがあります: _StopPressed`(bool)、 _TimeStart、` _Elapsed`(string)。 「開始」ボタンと「停止」ボタンもあります。

「開始」ボタンは、 _StopPressed`がtrueになるまで _ElapsedTime`を常に更新する UpdateTime`というメソッドを呼び出します。 最初にそれを書いたとき、 `UpdateTime`はUIをブロックするため、停止ボタンを押すことができなかったので、 UpdateTime`メソッドで System.Threading.ThreadPool.QueueUserWorkItem`を使用するようにコードを更新し、`バックグラウンドスレッドで_Elapsed。 これは、値を更新するのに最適です。

ただし、「UpdateTime()」内から「TextBlock」の「.Text」値を設定しようとすると、あるスレッドが別のスレッドのデータにアクセスすることに関係する「UnauthorizedAccessException」が発生します。

この例外を回避し、ブロックせずにUIを適切に更新するには、何をする必要がありますか?

1 Answer


0


タイマーの代わりにDispatcherTimerを使用します。ほぼ同じ動作をしますが、UI要素の更新に使用されます。