• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#中多线程实现后台任务的三种方式

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

第一种:通过Invoke()在应用程序的主线程上执行指定的委托

//新开一个线程,显示当前时间
new Thread(o =>
{                
    while (true)
    {
        Thread.Sleep(1000);
        Invoke((Action)delegate
        {
            this.textBox1.Text= DateTime.Now.ToString();
        }); 
    }
})
{ IsBackground = true }.Start();

第二种:使用类BackgroundWorker

//声明后台工作对象
BackgroundWorker BgWork = new BackgroundWorker();
//绑定事件
private void Form1_Load(object sender, EventArgs e)
{
    BgWork.DoWork += BgWork_Demo;
    BgWork.RunWorkerAsync();
}            
//要后台执行的函数        
void BgWork_Demo(object sender, DoWorkEventArgs e)
{
    try
    {
        Random rd = new Random();
        int i=rd.Next(1,3);
        if (i=1)
        {
            this.Invoke((EventHandler)(delegate { this.textBox1.Text = "成功就行怀孕,大家都会恭喜你!"; }));
        }
        else
            this.Invoke((EventHandler)(delegate { this.textBox1.Text = "但是没有人知道《你被搞了》多少遍才成功!"; }));
    }
    catch (Exception ex)
    {
        MessageBox.Show("程序出来点小问题..." + ex.Message, "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
    }
}

第三种:使用一个Timer结合异步委托方法

Timer tm = new Timer();
private void Form_Load(object sender, EventArgs e)
{
    tm.Interval = 1000;
    tm.Tick += tm_Tick;
    this.BeginInvoke((EventHandler)(delegate { tm.Start(); }));
}

void tm_Tick(object sender, EventArgs e)
{    
    if (1 == 2)
    {
        tm.Stop();        
        //do something...
    }
}

今天的知识就到这里啦,学会了没有。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
【开源工具】C#批量规范HTML工具发布时间:2022-07-14
下一篇:
C#中的Action和Func委托发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap