【发布时间】:2016-10-13 18:30:22
【问题描述】:
我有一个 C# Winforms 应用程序。我已将项目的输出类型设置为“类库”并使其 COM 可见,因此我可以在 Excel 的 VBA 代码中引用它。因此我可以通过 Excel 启动我的 WinForms-App。
到目前为止一切正常。在我的 VBA 代码中,我这样调用应用程序(宏):
Dim app As MyWinFormsApp.Program
Set app = New MyWinFormsApp.Program
Dim result As Integer
result = app.Main()
我的 C# 代码中的程序类如下所示:
public int Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
return 0;
}
当我启动宏时,WinForms 窗口打开并且程序运行良好。
我的问题是:当我通过单击红色 X 关闭 WinForms 窗口时,Excel 也会意外关闭。
我已经发现的是:
在我的 C# 类 Form1.Designer.cs 我有这个 Dispose-Method:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
当我调用 base.Dispose()-Method 传递'false'时
base.Dispose(false);
当我关闭 WinForms-Window 时 Excel 不会意外关闭,但是当我想在之后关闭 Excel 时,这是不可能的。我得到了这个“鼠标等待符号”并且不能做任何事情,所以我必须在 TaskManager 中终止 Excel 进程。
(我也尝试过使用一个新的 WinForms-Project,它在我原来的项目中确实没有提供任何东西我做错了什么......我的行为完全相同。)
所以我的问题是:有谁知道我如何关闭我的 WinForms-App,然后以“正常方式”关闭 Excel。
非常感谢!
【问题讨论】:
标签: c# winforms vba dll interop