好的,这是一个艰难的AFAIC ...我已经在C#中构建了一个COM可访问类型库,并且我试图将它暴露给MS Access。我可以引用,设置和读取属性,我的3个事件中的两个触发就好了。然而,第三个事件导致Access崩溃。我正在非常详细地记录事件日志中组件内的所有内容,因为Access设置了属性并接收事件。
我能说的最好的是,当我的事件被触发时,组件抛出一个空引用异常,因为事件没有被处理...(虽然我在Access应用程序中有一个处理程序,其他处理程序正在工作细)。
工作的处理程序与不处理的处理程序之间的区别在于,触发异常事件的进程在另一个线程上运行异步。
程序基本上是从HID端口读取事件。 deviceConnected
和deviceDisconnected
是从主线程中引发的。读取扫描数据的过程调用AsyncCallback as
如下:
var v = m_oFile.BeginRead(arrInputReport, 0, m_nInputReportLength, new AsyncCallback(ReadCompleted), arrInputReport);
然后ReadCompleted
触发初始事件,该事件冒泡到Access程序。
我甚至尝试使用BeginInvoke
来调用Access事件,如下所示:
Dispatcher.CurrentDispatcher.BeginInvoke((Action)(() =>
{
try
{
EVLog.Logger.LogInformation("Firing DeviceDataReceived");
DeviceDataReceived();//***<--this is handled by access and is throwing a null ref exception as if it is not being handled***
EVLog.Logger.LogInformation("Event fired");
}
catch (System.Exception ex)
{
EVLog.Logger.LogException(ex, "");
}
}), DispatcherPriority.Normal);
非常感谢任何正确方向的线索!