NUnitのテストメソッドを実行しているスレッドと、メインスレッドは違う。
この影響で、Application.Current.Dispatcher.CheckAccess() が false になり、UIをテストメソッドから処理すると例外が発生する。
Application.Current.Dispatcher.CheckAccess() がtrueになり、UI操作できるようにするには、System.Windows.Application.Current.Dispatcher.Invoke()から処理を実行する必要がある。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System.Windows; [Test] public void WPF_MainUiThreadTest() { new Application(); Application.Current.Dispatcher.Invoke(() => { if (Application.Current.Dispatcher.CheckAccess()) { // ここにUI操作処理を書く var a = ""; } }); } |
NUnitプロジェクトの参照に下記3つを、事前に追加しておく必要あり。
1 2 3 4 5 |
PresentationCore PresentationFramewort WindowsBase |
WPF開発 記事一覧
コメント