在第二次运行时以编程方式运行winforms app崩溃

时间:2012-08-21 17:48:06

标签: c# winforms

我有一个winforms应用程序,我用来测试一些库。我设置了这个程序,所以所有的测试设置都可以作为命令行参数传递。我还制作了第二个控制台应用程序,从文件中加载一组或多组这些测试设置,并为每组设置启动此winforms测试应用程序一次。由于每次测试运行都会对CPU进行锤击,因此我会按顺序执行运行,而不是同时运行。我通过调用:

启动winforms应用程序
WinFormAppNamespace.Program.Main(settings)

第一次运行正常,但在第二次运行时,我从winform应用程序的Program.cs中得到一个InvaildOperationException:

  

必须在第一个之前调用SetCompatibleTextRenderingDefault   IWin32Window对象是在应用程序中创建的。

显然,在调用静态main(...)方法来启动应用程序时,会创建一些状态,而不会在运行后将其丢弃。

我看到了一些解决方案:

1)首次运行后处理应用程序 - 不确定如何执行此操作。我调用了一个静态方法,没有返回任何内容,因此我认为我无法访问通过运行winforms应用程序实例化的任何内容。

2)在Program.cs中,检查SetCompatibleTextRenderingDefault(false)调用,这样只有在没有创建窗口时才会运行它。同样,我不确定我是否可以访问实例信息来检查它。

3)在自己的流程中运行应用程序。我试图避免这种情况,因为它需要复制额外的app.config文件以使其正常工作,但我开始认为这是唯一的选择。

思想?

2 个答案:

答案 0 :(得分:2)

创建并显示表单后,您无法调用Application.SetCompatibleTextRenderingDefault

这基本上意味着您无法在WinForms应用中多次直接呼叫Main

在再次致电Main之前,您必须终止该应用。

答案 1 :(得分:0)

通过调用其静态Main(...)方法运行程序只能运行一次,我得出的结论是实例化主窗体并调用ShowDialog()是可行的方法。只需确保您运行的程序不会通过调用Application.Exit()来终止,否则您可能会得到一些不可预测的结果。