多线程的学习

本文介绍了使用C#进行多线程编程的具体方法,包括如何创建线程、更新UI元素及处理线程间的通信。通过两个示例展示了如何在不影响主线程的情况下执行后台任务,并更新界面显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工作需要要用到多线程了,呵呵,高科技呀

 

public partial class Form1 : Form
    {
        static int i = 0;
        public Form1()
        {
            InitializeComponent();
        }
        delegate void lbdelegate();
        private void button1_Click(object sender, EventArgs e)
        {
            label2.Text = i.ToString();
            //Thread.Sleep(5000);
            Thread thread = new Thread(this.gettime);
            thread.Start();
            label2.Text = i.ToString();
            //thread.Abort();
            //gettime();
        }
        private void gettime()
        {
            if (this.InvokeRequired == false)
            {
                //Thread.Sleep(5000);
                label1.Text = DateTime.Now.ToString();
                i = 1000;
            }
            else
            {
                this.Invoke(new lbdelegate(gettime));
            }

        }

        private void button2_Click(object sender, EventArgs e)
        {
            label2.Text = i.ToString();
        }

 

这个例子有两点注意,子线程是依赖主线程的,如果主线程SLEEP,子线程同样会SLEEP,如果想在控件中使用子线程,要用上面的方法,还没有遇到其他特殊处理的,等项目同步更新

 

 

今天又无意中发现了另一种方法来实现进程间的通信,用在UI进程和子线程间的

private void button1_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(this.webthr);
            //thread.ApartmentState = ApartmentState.STA;
            thread.TrySetApartmentState(ApartmentState.STA);
            thread.Start();
        }
        void webthr()
        {
            //WebBrowser web = new WebBrowser();
            //web.Navigate("http://oofay.com.cn/js/data/game.js");
            //web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
            this.Invoke(new EventHandler(this.invokeTest));
        }

        public void invokeTest(object sender, EventArgs e)
        {
            System.Windows.Forms.WebBrowser web = new WebBrowser();
            //this.Controls.Add(web);
            web.Navigate("http://oofay.com.cn/");
            web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
        }


        void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            WebBrowser web = sender as WebBrowser;

            try
            {
                string html = "";
                html = web.Document.GetElementById("list2").InnerHtml;
                this.label1.Text = html;
            }
            catch
            {
                throw new NotImplementedException();
            }
        }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值