【发布时间】:2013-08-15 23:05:30
【问题描述】:
我正在使用 COM Interop 进行一些测试。我导出了这个测试类:-
<ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(GetType(ICounterEvents))> _
Public Class Counter
Implements ICounter
Public Event CountTicked(ByVal current As Integer, ByVal max As Integer)
Public Sub StartCount(ByVal max As Integer) Implements ICounter.StartCount
ThreadPool.QueueUserWorkItem(Sub() Count(max))
End Sub
Private Sub Count(ByVal max As Integer)
For i = 1 To max
Dim x As Integer = i
'COM Seems to synchronize this automatically
RaiseEvent CountTicked(x, max)
Thread.Sleep(300)
Next
End Sub
End Class
我在 VB6 中测试了上述内容,它按原样工作,这很奇怪。请注意,将在工作线程上调用 Count,因此其中引发的事件应该在工作线程上引发。然而,在 VB6 中,我能够从事件处理程序中更改标签的标题,而不会出现我没想到的问题或故障。如果这是从 VB.Net 完成的,则会引发跨线程异常。我的问题是,从 VB6 使用该类时会发生什么? COM 是否会在 VB6 应用程序的 UI 线程上自动引发事件?还是 VB6 不关心从工作线程更改的控件?
【问题讨论】: