C# 单独的窗口线程关闭
我有一个WPF应用程序,当点击一个按钮时,一个新窗口(C# 单独的窗口线程关闭,c#,wpf,multithreading,thread-safety,C#,Wpf,Multithreading,Thread Safety,我有一个WPF应用程序,当点击一个按钮时,一个新窗口(BrowserWindow)被实例化,加载一个全屏WebBrowser控件。窗口在第二个线程上被踢出,就像这样 private void BrowserThreadStart(BrowserWindow browser, String address) { browser = new BrowserWindow(); browser.LoadPage(address); browser.Show(); Syst
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();
}
这么多很好用
基于此,myMainWindow
以编程方式隐藏或关闭在单独线程上运行的BrowserWindow
实例的正确方法是什么
我注意到在我的主线程(在主窗口中)上,BrowserWindow myBrowser
为空(即使我可以看到它在第二个线程上运行)。您正在“传递值”这意味着BrowserThreadStart正在修改引用的副本,而不是引用。您需要在BrowserThreadStart方法声明和方法调用中添加到浏览器。下面是一个示例,您可以根据需要和首选项将ref替换为out
尝试更改:
private void BrowserThreadStart(BrowserWindow browser, String address)
到
及
到
谢谢。我会尝试一下。有点离题,但有没有一个“()=>”语法的术语。以前从来没有见过这样的东西,我正在尝试破译什么运算符/操作以什么顺序发生。@Trimal,它被称为a。
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"));