首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在不同的线程中更新我的标签并等待结果

在不同的线程中更新我的标签并等待结果
EN

Stack Overflow用户
提问于 2012-10-09 04:43:36
回答 2查看 234关注 0票数 0

在我的应用程序中,我正在启动进程(Tshark)并开始捕获,在我完成捕获后,我正在检查创建的文件,并从进程输出中解析接收到的数据包的数量,以便更新我的UI。在这一点上,如果创建的文件很大,所有的UI卡住,直到收到的数据包数量的结果,所以我想在不同的线程。

代码语言:javascript
复制
Capinfos capInfo = new Capinfos(); //my class who return the number of packets
ThreadStart tStarter = delegate {label.Text = capInfo._numberOfPackets.ToString("#,##0"); };
Thread thread = new Thread(tStarter);
thread.IsBackground = true;
thread.Start();

此代码返回交叉线程错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-09 04:48:10

你做错了。您应该在不同的线程中执行数据包捕获,仅访问UI线程中的UI元素。

有很多不同的方法可以做到这一点。最常见的可能是:

  • 当您需要等待时,您可以使用Control.InvokeControl.BeginInvoke来封送回UI线程
  • 您可以使用BackgroundWorker,它可以为您完成一些操作;您可以挂钩进度报告事件以从正确的线程更新UI
  • 如果您使用的是C# 5和.NET 4.5,您可以使用async/await在单个异步方法中自动返回UI线程<

>H29

票数 1
EN

Stack Overflow用户

发布于 2012-10-09 04:51:22

您似乎正在尝试使用UI线程(label.Text = ---)以外的线程来更新UI。我认为这可能就是问题所在。您可以使用Task实现异步。在使用BeginInvoke. http://msdn.microsoft.com/en-us/library/dd235678.aspx更新UI线程之前,可以使用TaskContinueWith方法等待任务完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12789179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档