我有一个用C#编写的进程内COM服务器(使用.NET Framework 3.5)基于此示例引发COM事件:http: //msdn.microsoft.com/en-us/library/dd8bf0x3(v = vs.90 )的.aspx
Excel VBA是我的COM服务器中最常见的客户端.我发现当我在Excel处于编辑模式(例如正在编辑单元格)时引发COM事件时,事件"丢失".这意味着,永远不会调用VBA事件处理程序(即使在Excel编辑模式完成之后),并且对C#事件委托的调用也会通过并静默失败,不会抛出任何异常.有谁知道如何在我的COM服务器上检测到这种情况?或者更好的是仍然使事件委托调用块,直到Excel退出编辑模式?
我试过了:
由于我没有表明客户端没有引发事件,我无法在代码中处理这种情况.
这是一个简单的测试用例.C#COM服务器:
namespace ComServerTest
{
public delegate void EventOneDelegate();
// Interface
[Guid("2B2C1A74-248D-48B0-ACB0-3EE94223BDD3"), Description("ManagerClass interface")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface IManagerClass
{
[DispId(1), Description("Describes MethodAAA")]
String MethodAAA(String strValue);
[DispId(2), Description("Start thread work")]
String StartThreadWork(String strIn);
[DispId(3), Description("Stop thread work")]
String StopThreadWork(String strIn);
}
[Guid("596AEB63-33C1-4CFD-8C9F-5BEF17D4C7AC"), Description("Manager events interface")]
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
[ComVisible(true)] …
Run Code Online (Sandbox Code Playgroud)