ian*_*sme 6 .net c# user-interface multithreading
我有一个我正在研究的宠物项目,它有多个工作线程.将所有内容输出到控制台变得越来越难以遵循,因此我想开发一个每个线程有一个输出区域的UI.我想知道线程向UI发送更新的最佳方式.我有两个想法:
1)让每个线程在新数据可用时设置"DataUpdated"标志,并让UI定期检查新数据.
2)创建每个线程,并在新数据可用时调用UI Update(...)方法.
我目前倾向于(2)有两个原因:我不喜欢"检查"每个线程的想法,因为这是我的第一个多线程应用程序,(2)似乎比它可能更简单.我想知道:
ito*_*son 12
您可以通过创建BackgroundWorker组件并在其DoWork处理程序中完成工作来轻松实现(2):
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerReportsProgress = true;
bw.DoWork += /* your background work here */;
bw.ProgressChanged += /* your UI update method here */;
bw.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
每个BackgroundWorker都可以通过调用ReportProgress向UI线程报告进度:虽然这主要用于报告有界进程的进度,但这不是必需的 - 如果这是您的UI更新所需要的,您也可以传递自己的自定义数据.您可以从DoWork处理程序调用ReportProgress.
BackgroundWorker的优点在于它可以为您处理大量杂乱的交叉线程细节.它也符合事件驱动的更新模型,您(正确地)更喜欢显式回调.
归档时间: |
|
查看次数: |
11309 次 |
最近记录: |