gpt4 book ai didi

c# - 告诉窗口从 C# 中的线程关闭

转载 作者:太空狗 更新时间:2023-10-30 00:52:50 26 4
gpt4 key购买 nike

我在 WPF 中工作,我有一个启动监听套接字的对话窗口,并且应该在有人连接后立即关闭。这是我天真的、不起作用的代码片段:

void acceptCallback(IAsyncResult iar)
{
socket = listenSocket.EndAccept(iar);
DialogResult = true; // error here
Close();
}

private void ValidButton_Click(object sender, RoutedEventArgs e)
{
IPEndPoint iep = new IPEndPoint(IPAddress.Any, port);
listenSocket.Bind(iep);
listenSocket.Listen(1);
listenSocket.BeginAccept(acceptCallback, null);
}

我收到一个错误,告诉我无法从此线程访问 DialogResult,我知道我的“acceptCallback”函数是从异步运行接受的线程调用的,但我真的不知道如何获得我的行为想要。

我如何从这个回调中告诉主线程它应该以正确的方式关闭对话窗口?

最佳答案

您通常只能从 UI 线程访问 UI 元素(如对话框窗口对象)。

这可以通过使用 UI 元素的 Dispatcher 简单地完成:

void acceptCallback(IAsyncResult iar)
{
socket = listenSocket.EndAccept(iar);

Dispatcher.Invoke(() =>
{
DialogResult = true;
Close();
});
}

如果是 .NET 4.0 或更低版本,您必须从 lambda 表达式显式创建一个 Action:

Dispatcher.Invoke(new Action(() =>
{
DialogResult = true;
Close();
}));

Dispatcher.Invoke((Action)(() =>
{
DialogResult = true;
Close();
}));

关于c# - 告诉窗口从 C# 中的线程关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19620837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com