Sto sviluppando una soluzione per questo mio problema ma ancora c'è qualcosa da chiarire. Il mio scenario è questo: ho un'applicazione VB6 e vorrei riuscire a chiamare da questa applicazione alcune nuove finestre scritte in WPF. Ho usato l'Interop Form Library per definire una WinForm che funge da ponte tra VB6 e WPF. L'Interop WinForm espone i metodi per avviare ed arrestare l'applicazione WPF.
Per fare ciò, nell'applicazione WPF ho definito questa classe helper:
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 il metodo DispatchEvent gestisce l'esecuzione di eventi specifici come l'apertura di una finestra.
Per esempio, nell'Interop WinForm ho scritto queste istruzioni:
MyWpfApp.StartApplicationHelper.Start()
Do While MyWpfApp.StartApplicationHelper.IsReady = False
System.Windows.Forms.Application.DoEvents()
Loop
MyWpfApp.StartApplicationHelper.DispatchEvent("OpenWin1") In questo modo posso definire un InteropFormMethod per aprire le finestre WPF da VB6 attraverso la Interop WinForm.
Questa soluzione sembra funzionare ma ho un problema con un particolare caso d'uso in cui l'applicazione wpf viene prima arrestata (shutdown) e poi riavviata (start); il messaggio di errore visualizato è: "Cannot create more than one System.Windows.Application instance in the same AppDomain".
Sto provando a modificare la mia classe helper per gestire questa situazione ma ancora non ho trovato una soluzione. Vorrei "ripulire" l'AppDomain per poter riavviare l'applicazione Wpf senza problemi.
Come posso fare? Avete qualche idea? Grazie.
Modificato da LukePet il 26 agosto 2010 08.54 -