【发布时间】:2017-02-16 01:51:36
【问题描述】:
所以这很奇怪。我有一个简单的表格来测试其他代码。它曾经可以工作,但是在添加了一些 Fakes 程序集(尝试为单元测试自动生成数据)之后,我的代码在 ShowDialog 上以 ThreadStateException 停止。我没有多线程,甚至没有使用任何非样板代码。搜索没有帮助,因为唯一的解决方案应该是使用已经完成的STAThread 属性进行标记。再说一遍,以前的代码可以正常工作,除了 Fakes 之外,项目配置没有任何变化。
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
下面的ShowDialog 发生异常。
private void button1_Click(object sender, EventArgs e)
{
using(var fod = new OpenFileDialog())
{
if(fod.ShowDialog()==System.Windows.Forms.DialogResult.OK)
{
runTest(fod.FileName );
}
}
}
编辑:
我在Main 中添加了一个断点来检查System.Threading.Thread.CurrentThread.GetApartmentState(),它正在返回MTA,所以看起来STAThread 属性被忽略了。我认为您无法更改正在运行的线程的单元,所以我很茫然。
【问题讨论】:
-
这不是罕见的事故。您需要发布输出窗口的内容以获得帮助。
-
@HansPassant,我的输出和立即窗口是空白的,没有调试信息。
-
还发现了一个类似的未回答问题,stackoverflow.com/questions/11560479/…
标签: c# .net openfiledialog microsoft-fakes