【问题标题】:UnauthorizedAccessException when testing a method creating a SolidColorBrush测试创建 SolidColorBrush 的方法时出现 UnauthorizedAccessException
【发布时间】:2015-02-02 11:13:24
【问题描述】:

我在互联网上看到了一些关于此的主题,但我觉得它们都不适用于我的情况......要么是这样,要么我只是没有从他们那里理解任何事情(这很可能)。

问题是:我正在为转换器方法编写一个测试,它将 Enum“转换”为适当的 SolidColorBrush。

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfoculture)
{
    画笔结果 = new SolidColorBrush(Colors.White);

    如果(值!= null)
    {
        开关((安装状态)值)
        {
            案例 InstallationStatus.Draft:
                结果 = 新的 SolidColorBrush(Colors.DarkGray);
                休息;
            案例 InstallationStatus.Ready:
                结果 = 新的 SolidColorBrush(Colors.Green);
                休息;
            案例 InstallationStatus.Uploaded:
                结果 = 新的 SolidColorBrush(Colors.Orange);
                休息;
            案例安装状态。错误:
                结果 = 新的 SolidColorBrush(Colors.Red);
                休息;
            默认:
                休息;
        }
    }
    返回结果;
}

当从应用程序的视图中调用时,它本身就可以正常工作。 我也有一个测试方法,基本上就是这样做的:

InstallationStatusBrushConverter 转换器 = new InstallationStatusBrushConverter();
对象结果 = converter.Convert(null, null, null, null);

测试方法调用 Convert,它尝试实例化结果字段,但抛出 UnauthorizedAccessException... 有人知道这里发生了什么吗?

【问题讨论】:

  • 我猜测试方法没有在UI线程中执行。任何与 UI 相关的东西都只能在 UI 线程中创建/访问。
  • 这个测试方法是否在后台线程上运行?错误消息是否看起来像System.UnauthorizedAccessException: Invalid cross-thread access.
  • 顺便说一句,您创建 new 画笔是否有特定原因?如何处理这些画笔,以免泄漏 GDI 句柄?相反,您可以只返回内置画笔:result = Brushes.Red
  • @ChrisDunaway WP 中没有 Brushes 类,WP 中也没有 GDI 句柄。创建新画笔非常安全。 :)
  • @yasen - 谢谢。我不确定 WP 是否属于这种情况。

标签: c# multithreading xaml exception windows-phone-8


【解决方案1】:

Can CultureInfo.CurrentCulture ever be null?

可能的错误来源 - System.Globalization.CultureInfo 不应为空。相反,在函数参数中,将culture参数更改为System.Globalization.CultureInfo.CurrentCulture

【讨论】:

  • 我想如果你自己不使用那个对象并不重要。在其他转换器单元测试中,我将 null 作为文化参数传递,它们工作得很好,所以它似乎没有在其他任何地方使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
  • 1970-01-01
  • 2020-01-02
相关资源
最近更新 更多