【发布时间】:2010-08-25 10:15:25
【问题描述】:
我对正在尝试开发的解决方案有疑问。这是我的场景: 我有一个 VB6 应用程序,我会从这个应用程序调用一些 WPF 窗口。我使用 Interop Form Library 来定义 WinForm,就像从 VB6 到 WPF 的桥梁。 Interop WinForm 公开了启动和关闭 wpf 应用程序的方法。
为此,在 WPF 应用程序中,我定义了一个这样的助手:
Public Class StartApplicationHelper
Public Shared Property IsReady As Boolean = False
Public Shared Event NotifyEvent As ValueEnterEventHandler
Public Shared Sub Start()
If System.Windows.Application.Current Is Nothing Then
Try
Dim myApp As Application = New Application
myApp.ShutdownMode = ShutdownMode.OnExplicitShutdown
myApp.InitializeComponent()
IsReady= True
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If
End Sub
Public Shared Sub Shutdown()
If System.Windows.Application.Current IsNot Nothing Then
System.Windows.Application.Current.Shutdown()
IsReady = False
End If
End Sub
Public Shared Sub DispatchEvent(ByVal eve As String)
If IsReady Then EventDispatcherService.DispatchEvent(eve, New EventDispatcherDataChildWin(String.Empty, Nothing, Nothing, False))
End Sub
Public Shared Sub DispatchResult(ByVal res As Object)
RaiseEvent NotifyEvent(Nothing, New ValueEnterEventArgs(res))
End Sub
End Class
DispatchEvent 方法管理特定事件的执行,例如打开应用程序窗口。
例如,我在 winform 上写过这样的语句:
MyWpfApp.StartApplicationHelper.Start()
Do While MyWpfApp.StartApplicationHelper.IsReady = False
System.Windows.Forms.Application.DoEvents()
Loop
MyWpfApp.StartApplicationHelper.DispatchEvent("OpenWin1")
通过这种方式,我可以定义一个 InteropFormMethod 以通过 Interop WinForm 从 VB6 打开 wpf 窗口。
此解决方案似乎可行,但我遇到了 wpf 应用程序停止(关闭)然后重新启动(启动)的特定用例的问题。这是显示的错误消息:“无法在同一个 AppDomain 中创建多个 System.Windows.Application 实例”。
我正在尝试修改我的助手来管理这个案例,但我仍然没有找到解决方案。我会清理 AppDomain 以重新启动 wpf 应用程序。 我能怎么做?你能帮帮我吗?
【问题讨论】:
标签: wpf winforms interop appdomain