我有一个方法,需要一个BitmapImage
.
我试图通过创建或加载 aBitmapImage
然后将其传递给所述方法来测试它。
但是,单元测试不允许我创建一个bitmapimage
,它会抛出一个InvalidCrossThreadException
.
是否有任何文档或资源详细说明如何对BitmapImages
采用Windows Phone 8
.
我们正在使用Visual Studio 2012-update 2。
我有一个方法,需要一个BitmapImage
.
我试图通过创建或加载 aBitmapImage
然后将其传递给所述方法来测试它。
但是,单元测试不允许我创建一个bitmapimage
,它会抛出一个InvalidCrossThreadException
.
是否有任何文档或资源详细说明如何对BitmapImages
采用Windows Phone 8
.
我们正在使用Visual Studio 2012-update 2。
BitmapImage
只能在 UI 线程上运行,而单元测试是从后台线程运行的。这就是您收到此异常的原因。对于任何涉及BitmapImage
或其他 UI 组件的测试,您需要:
Dispatcher.BeginInvoke()
例如,使用ManualResetEvent
(信号量)进行跨线程信号发送,并确保将任何(可捕获的)异常传递回测试线程......
[TestMethod]
public void TestMethod1()
{
ManualResetEvent mre = new ManualResetEvent(false);
Exception uiThreadException = null;
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
try
{
BitmapImage bi = new BitmapImage();
// do more stuff
// simulate an exception in the UI thread
// throw new InvalidOperationException("Ha!");
}
catch (Exception e)
{
uiThreadException = e;
}
// signal as complete
mre.Set();
});
// wait at most 1 second for the operation on the UI thread to complete
bool completed = mre.WaitOne(1000);
if (!completed)
{
throw new Exception("UI thread didn't complete in time");
}
// rethrow exception from UI thread
if (uiThreadException != null)
{
throw uiThreadException;
}
}