BackGroundWorker后台多线程问题

Viccy_Yao 2013-05-14 12:27:03
public class Program
{
#region BackGroundWorker
public static int gloable = 0;
public static List<BackgroundWorker> bws = new List<BackgroundWorker>();
static void Main(string[] args)
{
Console.WriteLine("---BackGroundWorker Begin---");
for (int i = 1; i <= 10; i++)
{
Events(i);
}
Console.WriteLine("---BackGroundWorker End---");
Console.ReadKey();
}
public static void Events(int num)
{
try
{
using (BackgroundWorker BackHandler = new BackgroundWorker())
{
if (num != 3)
{
Thread.Sleep(500);
}
else
{
Thread.Sleep(1500);
}
BackHandler.DoWork += new DoWorkEventHandler(Send);
BackHandler.RunWorkerAsync(100);
bws.Add(BackHandler);
BackHandler.RunWorkerCompleted += new RunWorkerCompletedEventHandler(ThreadOver);
}
}
catch
{
Console.WriteLine("BackGroundWorkerError!");
}
}

public static void Send(object obj, DoWorkEventArgs e)
{
BackgroundWorker bg = obj as BackgroundWorker;
int Num = (int)e.Argument;
for (int i = 1; i <= Num; i++)
{
Console.WriteLine("---BackGroundWorker" + i + "---");
}
}

public static void ThreadOver(object sender, RunWorkerCompletedEventArgs e)
{
BackgroundWorker bg = sender as BackgroundWorker;
bws.Remove(sender as BackgroundWorker);
gloable = gloable + 1;
Console.WriteLine("BackGroundWorker!---" + gloable + "---end");
bg.Dispose();
}
#endregion
}

后台异步线程的效果是有了,但是没有体现出多线程的效果!Events处的我让一个num为3的时候多sleep一会
...全文
85 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
我要坚强 2013-05-14
  • 打赏
  • 举报
回复
你到底让谁睡,你现在的sleep是一共有十个BackgroundWorker,当主线程要调用第三个BackgroundWorker时,主线程睡1500ms然后再调用BackgroundWorker,其余500ms后调用BackgroundWorker。不过一个对象中最好不要同时运行两个或两个以上BackgroundWorker(还好你的程序中同时只用了一个,不过好像很少有像你这样用BackgroundWorker的吧)
Viccy_Yao 2013-05-14
  • 打赏
  • 举报
回复
自己先顶一下!

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧