C#中的BackgroundWorker运行多次
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#中的BackgroundWorker运行多次,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2281字,纯文字阅读大概需要4分钟。
内容图文
![C#中的BackgroundWorker运行多次](/upload/InfoBanner/zyjiaocheng/809/add1f419a0ae4a8394f9ea8fb218f215.jpg)
我正在编写一个执行特定任务的程序(检查某些内容),当我使用后台工作程序(多个)时,它们会执行多次.我只希望他们执行一次.
我有一个按钮,代码如下:
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Text Documents|*.txt|All Files|*.*";
ofd.ShowDialog();
string filename = ofd.FileName;
SortList(filename);
排序列表功能将文件排序到多个列表中,稍后我将用于后台工作程序.
public void SortList(string file)
{
string[] names = System.IO.File.ReadAllLines(file);
int list = 1;
for (int i = 0; i < names.Length; i++)
{
switch (list)
{
case 1:
l1.Add(names[i]);
break;
case 2:
l2.Add(names[i]);
break;
case 3:
l3.Add(names[i]);
break;
case 4:
l4.Add(names[i]);
break;
case 5:
l1.Add(names[i]);
list = 1;
break;
}
list++;
}
backgroundWorker1.RunWorkerAsync();
backgroundWorker2.RunWorkerAsync();
backgroundWorker3.RunWorkerAsync();
backgroundWorker4.RunWorkerAsync();
}
这个功能没有问题,我已经调试了,列表按原样分割,没有额外的行等.问题是后台工作人员多次完成工作.
我的最后一个功能是check one,看起来像这样:
public void CheckList(List<string> names)
{
for (int i = 0; i < names.Count(); i++)
{
try
{
foreach (string s in names)
{
uu.parsePage("Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)", s);
string[] r = { uu.followers.ToString(), uu.followingcount, uu.isVerified.ToString() };
listView1.Invoke(new Action(() => listView1.Items.Add(uu.username).SubItems.AddRange(r)));
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
每个后台工作者都有这样的代码:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
CheckList(l1);
}
private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
{
CheckList(l2);
}
private void backgroundWorker3_DoWork(object sender, DoWorkEventArgs e)
{
CheckList(l3);
}
private void backgroundWorker4_DoWork(object sender, DoWorkEventArgs e)
{
CheckList(l4);
}
我做了一些调试,我无法找出为什么后台工作人员多次做这项工作.是否有一些冲突或我做错了什么?谢谢.
我使用的示例文件:
danbilzerian
dailywatch
fitness
fitspo
bodyofrachael
这是5个条目,后台工作人员多次完成一些工作,最终看起来像这样:
解决方法:
问题出在CheckList方法中.
第一个循环的目的是什么?
你在第一个循环中循环“名称”,然后在foreach中循环遍历它.
由于你没有使用i计数器,似乎第一个循环没用.
BackgroundWorker事件不会被执行多次,为了确保这一点,只需使用Console.WriteLine(“BackGroundWork 1 Started”);在每个DoWork事件中,检查“输出”窗口中的输出.
内容总结
以上是互联网集市为您收集整理的C#中的BackgroundWorker运行多次全部内容,希望文章能够帮你解决C#中的BackgroundWorker运行多次所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。