2010-08-25 64 views
0

我遇到了一個我正在嘗試開發的解決方案的問題。這是我的場景: 我有一個VB6應用程序,我會從這個應用程序調用一些WPF窗口。我已經使用Interop表單庫來定義WinForm,比如從VB6到WPF的橋樑。 Interop WinForm公開了啓動和關閉wpf應用程序的方法。從Windows窗體運行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到來自全國各地的互操作的WinForm VB6打開WPF窗口

此解決方案似乎工作,但我有一個wpf應用程序停止(關機),然後重新啓動(開始)的特定用例的問題。這是顯示的錯誤消息:「不能在同一AppDomain中創建多個System.Windows.Application實例」。

我想修改我的幫手來管理這種情況,但我仍然沒有找到解決方案。我會清理AppDomain以重新啓動wpf應用程序。 我該怎麼辦?你可以幫我嗎?

回答

0

最簡單的方法就是保持WPF應用程序「運行」:

當你想關閉的WPF應用程序只需關閉所有打開的WPF窗口,做任何你想要的清理,但不要打電話關機。

稍後,當WPF部件「重新啓動」時,只需打開主窗口而不重新初始化應用程序。

您的其他選擇是在另一個AppDomain中運行WPF應用程序,並在啓動/停止時加載和卸載它,這更復雜,使得WPF部分與應用程序的其餘部分之間的通信變得困難,並且在我看來,並非如此在這種情況下值得。

相關問題