我有一个用于测试一些库的 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 文件才能使其工作,但我开始认为这是唯一的选择。
想法?