相关疑难解决方法(0)

BackgroundWorker与后台线程

我有一个关于我应该在Windows窗体应用程序上使用的后台线程实现的选择的风格问题.目前我BackgroundWorker在一个具有无限(while(true))循环的表单上.在这个循环中,我WaitHandle.WaitAny用来保持线程打盹直到感兴趣的事情发生.我等待的一个事件句柄是一个" StopThread"事件,这样我就可以摆脱循环.来自我被覆盖的事件会发出此事件的信号Form.Dispose().

我读到的某个地方BackgroundWorker真的是用于那些你不想将UI绑定到并且具有有限结束的操作 - 比如下载文件或处理一系列项目.在这种情况下,"结束"是未知的,并且仅在窗口关闭时.因此,使用后台线程而不是BackgroundWorker为此目的更合适吗?

.net multithreading backgroundworker winforms

163
推荐指数
7
解决办法
11万
查看次数

如何在使用任务时使用上一个任务的结果继续使用另一个函数?

我有WCF连接器,应该为我获取一些少量数据,通常需要20秒才能获得每个项目的数据(这很好).我想使用Task为我获取数据,然后使用此任务中的值添加WinForm控件.

我已经创建了包含这些数据的对象列表.

首先使用Task作为更新列表的任务,我想要在第一个Task完成创建控件后立即执行Task.

这是到目前为止的代码:

List<IpVersionCounter> ipVersionCounters = new List<IpVersionCounter>();
Task task = Task.Factory.StartNew(() =>
{
   foreach (var sitein settings.Sites)
   {
       string ip = site.ip;
       string version = "undefined";

       using (WcfConnector wcfConnector = 
                    WcfConnector.CreateConnectorWithoutException((ip)))
       {
           if (wcfConnector != null)
           {
               version= string.Format("{0} {1} {2}", 
               wcfConnector.VersionController.GetBranchName(), 
               wcfConnector.VersionController.GetBuildNumber(),
               wcfConnector.VersionController.GetCurrentVersion());
           }
       }
       counter++;
       ipVersionCounters.Add(new IpVersionCounter
                            {
                            Ip = ip,
                            Version = Version,
                            Counter = counter
                            });
    }
return ipVersionCounters;
}).ContinueWith();

AddProgressBar(ipVersionCounter);
Run Code Online (Sandbox Code Playgroud)

我不知道我是否正确的方式以及如何使用ContinueWith将值从第一种方法传递到第二种方法.

.net c# multithreading

29
推荐指数
1
解决办法
3万
查看次数

标签 统计

.net ×2

multithreading ×2

backgroundworker ×1

c# ×1

winforms ×1