0

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

WinFormAppNamespace.Program.Main(settings)

这第一次运行良好,但在第二次运行时,我从 winform 应用程序的 Program.cs 中得到一个 InvaildOperationException ,上面写着:

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

显然,在调用静态 main(...) 方法来启动应用程序时,会创建一些状态并且在运行后不会释放。

我看到了一些解决方案:

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

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

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

想法?

4

2 回答 2

2

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

这基本上意味着您不能Main在 WinForms 应用程序中多次直接调用自己。

您必须在Main再次调用之前终止该应用程序。

于 2012-08-21T19:08:46.030 回答
0

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

于 2012-08-22T15:59:10.537 回答