【发布时间】:2012-06-05 07:13:01
【问题描述】:
我想在我的 c# 应用程序中添加原生窗口 ProgressDialog。 为了更好地控制,我定义了一个 OnUserCancelled 事件。 从主窗体调用 ShowDialog() 后,ProgressDialog 类启动一个线程来检查原生 ProgressDialog 是否被取消。但问题是IProgressDialog属于主线程,无法从checker线程访问,错误严重:
无法将“WindowsDialogs.Invokes.Interfaces.IProgressDialogC”类型的 COM 对象转换为接口类型“WindowsDialogs.Invokes.Interfaces.IProgressDialog”。此操作失败,因为 IID 为“{EBBC7C04-315E-11D2-B62F-006097DF5BD4}”的接口的 COM 组件上的 QueryInterface 调用因以下错误而失败:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE)) .
我想知道有什么方法可以将我的命令调用到主类(例如 .net Form 中的 Invoke() 方法)。
注意:Timer 类也有同样的问题...
【问题讨论】:
-
强制转换在主线程中不是问题,但在第二线程中可能是问题...
标签: c# multithreading invoke