Dll 偶数处理程序代码块中未处理的异常

Dll 偶数处理程序代码块中未处理的异常,dll,exception-handling,event-handling,c++-cli,Dll,Exception Handling,Event Handling,C++ Cli,我正在用C++/CLI编写一个DLL,它在基于C#的GUI应用程序中调用。我抛出一个自定义异常(从exception类派生),该异常如果没有包含在我的DLL中,将在GUI代码的最后一个catch块中处理。它适用于所有投掷,只保留一次: Im我的DLL我已经实现了一个将侦听事件的处理程序。如果我得到一个不正确的数据包,我会引发一个自定义异常,该异常在最外层的try-catch块中被重试。GUI应该显示此自定义异常。但由于某些原因,不会重新抛出此块中引发的异常。相反,我在调试模式下得到一条“未处理的

我正在用C++/CLI编写一个DLL,它在基于C#的GUI应用程序中调用。我抛出一个自定义异常(从exception类派生),该异常如果没有包含在我的DLL中,将在GUI代码的最后一个catch块中处理。它适用于所有投掷,只保留一次:


Im我的DLL我已经实现了一个将侦听事件的处理程序。如果我得到一个不正确的数据包,我会引发一个自定义异常,该异常在最外层的try-catch块中被重试。GUI应该显示此自定义异常。但由于某些原因,不会重新抛出此块中引发的异常。相反,我在调试模式下得到一条“未处理的异常”消息。当我通过双击exe(在release文件夹中)直接运行exe时,它会崩溃。显然,GUI不会处理此事件处理程序方法中引发的异常。或者可能它们没有从我的DLL传递到GUI。它不会给我的dll的其他部分带来问题。我认为这种不同行为的唯一原因是事件处理程序没有调用方。我的猜测正确吗?还是有其他原因。关于我如何处理这个问题有什么线索吗?我不希望我的应用程序崩溃。我只想引发一个异常,以便在GUI中向用户显示消息,并且应用程序可以停止与串行端口的通信。

在从该事件处理程序引发之前,您需要切换到UI线程。这通常是通过完成的,但是如果您使用WinForms,您也可以使用或。

谢谢。这是正确的答案。不幸的是,我不能使用Invoke,因为它会在项目中产生交叉引用问题。相反,我创建了一个单独的事件来通知这种情况,而不是引发异常。事件处理程序将执行与我的异常处理程序几乎相同的操作。