У меня проблема с решением, которое я пытаюсь разработать. Это мой сценарий:
У меня есть приложение 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 для открытия окна wpf из VB6 через Interop WinForm.
Это решение кажется работающим, но у меня есть проблема с конкретным случаем использования, когда приложение wpf останавливается (завершение работы), а затем перезапускается (запуск). Это отображаемое сообщение об ошибке: «Невозможно создать более одного экземпляра System.Windows.Application в одном домене приложений».
Я пытаюсь изменить своего помощника для управления этим делом, но я до сих пор не нашел решения. Я бы очистил AppDomain, чтобы перезапустить приложение wpf.
Как я могу сделать? Вы можете мне помочь?