0

ライブラリを作成しています。必要なことの 1 つは、携帯電話の画面解像度 (ピクセル単位) (幅 x 高さ) です。

私たちはこの方法をうまく使っていました

Screen.Width = (int) System.Windows.Application.Current.Host.Content.ActualWidth;
Screen.Height = (int) System.Windows.Application.Current.Host.Content.ActualHeight;

ただし、このメソッドがバックグラウンド スレッドによって呼び出されるケースを処理しないため、Dispatcher を使用するように変更しました。

System.Windows.Application.Current.RootVisual.Dispatcher.BeginInvoke(() =>
  {
    Screen.Width = (int) System.Windows.Application.Current.Host.Content.ActualWidth;
    Screen.Height = (int) System.Windows.Application.Current.Host.Content.ActualHeight;
  });

ただし、BeginInvoke を使用しただけで、「無効なクロス スレッド アクセス」例外がスローされたようです。

現在レンダリングされている XAML ページへの参照がなくても、これを適切に処理するにはどうすればよいでしょうか?

4

1 に答える 1

2

アクセスするだけApplication.Current.RootVisualでは無効なクロス スレッド アクセス例外がスローされるため、この方法ではディスパッチャーにアクセスできません。代わりに、次を使用しますSystem.Windows.Deployment.Current.Dispatcher

System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() =>
{
    Screen.Width = (int) System.Windows.Application.Current.Host.Content.ActualWidth;
    Screen.Height = (int) System.Windows.Application.Current.Host.Content.ActualHeight;
});
于 2013-04-03T21:20:41.053 に答える