我創建了下面的測試場景來跟蹤與VB6-WPF互操作的一個錯誤:WPF的互操作VB6,定時器運行時錯誤
有是一個.NET WPF DLL顯示一個文本框的形式。該文本框不處理鍵盤輸入 - 沒有數據綁定,沒有事件處理程序。 DLL是COM可見的。
VB6.exe調用DLL ShowWindow函數來顯示WPF表單。當我在文本框中鍵入任何鍵時,它會在VB應用程序中導致「運行時錯誤」6「溢出」錯誤。該錯誤發生在Timer1事件的「dVal = 0」行中。
我猜錯誤發生是因爲未處理的鍵盤事件冒泡到VB6應用程序。如果WPF事件泡到VB6?爲什麼問題出現在計時器中?爲什麼只有在設置雙變量時纔會發生?如果「dVal = 0」行不存在,則不會發生這種情況。有什麼想法嗎?從公共類
C#代碼顯示的窗口:
public class NetFormIFace : INetFormIFace
{
public void ShowWindow1()
{
Window1 w1;
w1 = new Window1();
w1.Show();
}
}
XAML爲窗口。沒有被添加到代碼隱藏:
<Window x:Class="SSEC.NetForm.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Canvas>
<TextBox Height="34" Canvas.Left="35" TextWrapping="Wrap" Text="TextBox" Canvas.Top="52" Width="94" />
</Canvas>
</Window>
VB6代碼:
Option Explicit
Dim IFace As NetFormIFace
Private Sub Command1_Click()
IFace.ShowWindow1
End Sub
Private Sub Form_Load()
Set IFace = New NetFormIFace
Timer1.Interval = 50
Timer1.Enabled = True
End Sub
Private Sub Timer1_Timer()
Dim iVal As Integer
Dim dVal As Double
iVal = 0 ' Does not cause an error
dVal = 0 ' Causes an error
End Sub
接受此作爲答案,因爲我同意共享消息循環是問題。 –