2013-09-25 33 views
1

我是開發wpf的初學者,我需要知道如何在TabControl控件中運行中的.exe應用程序。 我這樣做片段:在wpf應用程序的新項目標籤中運行exe文件

private void MenuItem_Click_6(object sender, RoutedEventArgs e) { 
    TabItem nPage = new TabItem(); 
    nPage.Header = "nouveau"; 
    TabPage.Items.Add(nPage); 
    ProcessStartInfo pInfo = new ProcessStartInfo("Multi-langue.exe"); 
    pInfo.WorkingDirectory = @"C:\Multi-langue\Multi-langue\bin\Debug"; 
    Process p = Process.Start(pInfo); 
    } 

新的應用程序正在運行,但不是新的TabItem內。

那麼我如何修改我的代碼片段來集成第一個啓動的第二個應用程序的顯示?

+1

我不認爲你可以在'TabItem'內部運行的外部應用程序。 – meilke

+3

'TabItem'不能簡單地託管一個外部程序。 WPF是強大的,但不是那麼強大:) 檢出[this](http://stackoverflow.com/questions/5028598/hosting-external-app-in-wpf-window)線程 –

+0

http://www.codeproject .com /文章/ 23064/Window-Tabifier –

回答

4

我覺得這個解決方案,它的正常工作

public IntPtr MainWindowHandle { get; set; } 
      [DllImport("user32.dll", SetLastError = true)] 
     private static extern long SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

private void MenuItem_Click_6(object sender, RoutedEventArgs e) { 

     TabItem nPage = new TabItem(); 
     WindowsFormsHost host = new WindowsFormsHost(); 
     System.Windows.Forms.Panel p = new System.Windows.Forms.Panel(); 
     host.Child = p; 
     nPage.Header = "nouveau"; 
     nPage.Content = host; 
     TabPage.Items.Add(nPage); 
     Process proc = Process.Start(
    new ProcessStartInfo() 
    { 
     FileName = @"C:\Multi-langue\Multi-langue\bin\Debug\Multi-langue.exe", 

     WindowStyle = ProcessWindowStyle.Normal 
    }); 
     Thread.Sleep(1000); 
     SetParent(proc.MainWindowHandle, p.Handle); 

    } 
+2

不錯!我建議把proc.WaitForInputIdle();而不是Thread.Sleep(1000),因爲它是等待proc的主UI線程準備好接收SetParent消息的更快的方法。 – Larry

相關問題