我有一个WPF应用程序,当单击一个按钮时,将实例化一个新窗口(BrowserWindow
),以加载全屏WebBrowser
控件。 Window就是在这样的第二个线程上开始的。
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
实例的正确方法是什么?
我注意到我的主线程(在MainWindow中),BrowserWindow myBrowser
为空(即使我可以看到它并在第二个线程上运行。
答案 0 :(得分:2)
您正在“按值传递”,这意味着BrowserThreadStart会修改引用的副本而不是引用。您需要在BrowserThreadStart方法声明和方法调用中向浏览器添加ref or out。下面是一个示例,您可以根据需要和偏好替换ref。
尝试更改:
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"));