我目前有一个应用程序可以打开一个向用户显示信息的ActiveX对象。 COM对象需要在新线程中才能成为模态。目前我遇到了一些问题:
可能有以下几种解决方案:
Show方法的代码如下:
public void Show(string url, int entityId, string sessionId, int projId, string docId)
{
try
{
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
base.Show(); //exception occurs here
}
catch (Exception ex)
{
//continue without dialog because once continuing in the dialog, application runs without error
Logger.Error("Base.Show() throws InvalidOperationException, but continuing will bypass issue", ex);
}
try
{
this.DocViewer.InitComm(url, entityId, sessionId, projId, docId);
}
catch (Exception ex)
{
Logger.Error("Error opening papervision viewer", ex);
throw;
}
}
我不确定如何在主线程中访问此方法,并尝试使用BeginInvoke,但base.Show()必须在运行DocViewer.InitComm之前打开窗口。
提前感谢您的帮助!
答案 0 :(得分:1)
要解决此问题,我可以更改:
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
到
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
这解决了这个问题。