1

我还没有为 NUnit 解决这个问题。有一个类似的问题被问到,这里提出了这个例外。答案解决了 xUnit 的使用,提问者报告说他让它为 MSTest 工作。我已尝试调用Dispatcher.CurrentDispatcher.InvokeShutdown();、和方法[TearDown],但仍然出现异常。[TestFixtureTearDown][Test]

关于我的实现的更多细节:我创建了一个扩展 System.Windows.Window 的 InputBox 类。我做了一个静态方法,InputBox.Show(prompt)它执行以下代码:

        var input = "";
        var t = new Thread(() =>
            {
                var inputBox = new InputBox(prompt);
                inputBox.ShowDialog();
                input = inputBox.Input;
            }) {IsBackground = true};
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        t.Join();
        return input;

有任何想法吗?

4

2 回答 2

1

感谢评论中关于 Dispatcher 调用的想法。我更改了 InputBox.Show 方法,现在看起来像这样,而且效果很好。我的单元测试中没有任何Dispatcher调用,也没有遇到异常。

    public static string Show(string prompt)
    {
        string input = null;
        var t = new Thread(() =>
        {
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new Action(() =>
            {
                var inputBox = new InputBox(prompt);
                inputBox.ShowDialog();
                input = inputBox.Input;
            }));
            Dispatcher.CurrentDispatcher.InvokeShutdown();
        }) { IsBackground = true };
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        t.Join();
        return input;
    }
于 2013-09-20T22:46:27.050 回答
0

您是否在测试方法之上尝试过 [RequireMTA](使用智能来证明正确性)属性?ApartmentState.STA - 在我看来是给你带来麻烦的声明

于 2013-09-20T22:22:04.990 回答