0

我正在创建一个库。我们需要的一件事是手机的屏幕分辨率(以像素为单位)(宽乘高)

我们成功地使用了这个方法

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 回答