2012-01-23 74 views
1

我有一個WPF應用程序,當點擊一個按鈕時,一個新窗口(BrowserWindow)被實例化,加載全屏幕WebBrowser控件。窗口像這樣在第二個線程上啓動。獨立窗口線程關閉

private void BrowserThreadStart(BrowserWindow browser, String address) 
{ 
    browser = new BrowserWindow(); 
    browser.LoadPage(address); 
    browser.Show(); 
    System.Windows.Threading.Dispatcher.Run(); 
} 

private void Press(object sender, MouseButtonEventArgs e) 
{ 
    Thread mainBrowserThread = new Thread(() => BrowserThreadStart(myBrowser, "http://www.google.com")); 
    mainBrowserThread.SetApartmentState(ApartmentState.STA); 
    mainBrowserThread.IsBackground = true; 
    mainBrowserThread.Start(); 
} 

這樣做效果很好。

基於此,我的MainWindow以編程方式隱藏或關閉運行在單獨線程上的BrowserWindow實例的正確方法是什麼?

我注意到我的主線程(在主窗口),該BrowserWindow myBrowser爲空(即使我能看到它,並在第二個線程上運行。

回答

2

您這意味着BrowserThreadStart是修改「按值傳遞」您需要在BrowserThreadStart方法聲明和方法調用中將ref or out添加到瀏覽器中,下面是一個示例,您可以根據需要和首選項將ref替換爲out,

嘗試更改:

private void BrowserThreadStart(BrowserWindow browser, String address) 

private void BrowserThreadStart(out BrowserWindow browser, String address) 

Thread mainBrowserThread = new Thread(() => BrowserThreadStart(myBrowser, "http://www.google.com")); 

Thread mainBrowserThread = new Thread(() => BrowserThreadStart(out myBrowser, "http://www.google.com")); 
+0

謝謝。我會試試這個。有點偏離主題的問題,但有一個術語「()=>」語法。從來沒有見過類似的東西,並試圖破譯什麼樣的操作員/操作以什麼順序進行。 – Ternary

+0

@Ternary,它被稱爲[lambda表達式](http://msdn.microsoft.com/en-us/library/bb397687.aspx)。 – David