Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单独的窗口线程关闭_C#_Wpf_Multithreading_Thread Safety - Fatal编程技术网

C# 单独的窗口线程关闭

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

我有一个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();
}
这么多很好用

基于此,my
MainWindow
以编程方式隐藏或关闭在单独线程上运行的
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"));