36 messaggi dal 16 aprile 2008
www.pollosky.it
Ciao a tutti, sto gravitando intorno ad un problema in cerca della strada migliore per risolverlo e vorrei un vostro parere.

Dunque, sto estendendo un gestionale sviluppato interamente in VB6 che si appoggia ad una base dati SQL Server. Le nuove estensioni (nuovi trattamenti, form di manutenzione, etc.) pur risultando esteticamente quasi identiche sono scritte in WPF...quindi con una tecnologia distante anni luce dalla precedente.

Ora avrei la necessità di instaurare un minimo di comunicazione tra i due ambienti. Mi spiego meglio, le necessità che ho sono le seguenti.
1) Riuscire a richiamare l'apertura di una form WPF da del codice VB6
2) Riuscire a richiamare l'apertura di una form VB6 da del codice WPF
3) Gestire delle notifiche/eventi da una form WPF che possano essere intercettate da una form VB6

Sto facendo una serie di prove con l'Interop Form Toolkit e con l'utilizzo dei servizi WCF ma ancora non ho trovato una soluzione che sembra convincermi. Mi chiedevo se qualcuno di voi avesse delle esperienze in merito e fosse in grado di indicarmi la strada migliore da seguire. Grazie.

Luca
36 messaggi dal 16 aprile 2008
www.pollosky.it
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 -

Luca

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC