【发布时间】: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