首页 / C# / 告诉窗口关闭C#中的一个线程
告诉窗口关闭C#中的一个线程
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了告诉窗口关闭C#中的一个线程,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1082字,纯文字阅读大概需要2分钟。
内容图文
![告诉窗口关闭C#中的一个线程](/upload/InfoBanner/zyjiaocheng/817/340b3243ff9f4cb58d964485102ccfa6.jpg)
我在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”函数是从异步运行accept的线程调用的,但是我真的不知道如何获得我想要的行为.
如何从这个回调中告诉主线程它应该以正确的方式关闭对话框窗口?
解决方法:
您通常只能从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#中的一个线程所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。