.Net COM对象在从新线程触发事件时导致Access崩溃

时间:2016-08-02 21:32:36

标签: c# multithreading ms-access events

好的,这是一个艰难的AFAIC ...我已经在C#中构建了一个COM可访问类型库,并且我试图将它暴露给MS Access。我可以引用,设置和读取属性,我的3个事件中的两个触发就好了。然而,第三个事件导致Access崩溃。我正在非常详细地记录事件日志中组件内的所有内容,因为Access设置了属性并接收事件。

我能说的最好的是,当我的事件被触发时,组件抛出一个空引用异常,因为事件没有被处理...(虽然我在Access应用程序中有一个处理程序,其他处理程序正在工作细)。

工作的处理程序与不处理的处理程序之间的区别在于,触发异常事件的进程在另一个线程上运行异步。

程序基本上是从HID端口读取事件。 deviceConnecteddeviceDisconnected是从主线程中引发的。读取扫描数据的过程调用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);

非常感谢任何正确方向的线索!

0 个答案:

没有答案