前言

     在很多情况下,我们都会使用到多线程,在使用多线程的时候,我们很多时候又会去访问控件,这里面就会出现很多问题!!!我以一个最常见的,我们经常会用到的例子来讲讲,在提高自己水平的同时,希望能给大家带来一些方便,有不对的地方还请留言告知,以便及时更正自己的错误思想,先谢谢啦!

1、多线程使用

    有时候在执行一段程序时会耗时比较长,这时候会发现,我们的窗体就拖不动了,就像卡死了,但那段耗时程序执行完之后,就恢复OK了,这就是我们常说的程序假死!代码如下:

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            Calculate();
        }
        private void Calculate()
        {
            for (int i = 0; i < 500; i++)
            {
                Thread.Sleep(5);
            }
        }
View Code

 这时候使用多线程就很容易解决程序假死问题,修改代码如下:

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            Thread mythread = new Thread(Calculate);
            mythread.IsBackground = true;        //設置為後臺線程,程式關閉后進程也關閉,如果不設置true,則程式關閉,此線程還在內存,不會關閉
            mythread.Start();
        }
        private void Calculate()
        {
            Stopwatch stopwatch = Stopwatch.StartNew();
            for (int i = 0; i < 500; i++)
            {
                Thread.Sleep(5);
            }
            stopwatch.Stop();
            long lSearchTime = stopwatch.ElapsedMilliseconds;
            MessageBox.Show(lSearchTime.ToString()+"毫秒");
        }
View Code

2、访问控件方式

以上我们就解决了程序假死的问题,可需求又来了,我想知道计算的进度,能直观的感受到计算多少了,是不是快计算完了,这时候我们想到了进度条,这时候我们就加入进度条呗,代码如下:

        private void btnCalculate_Click(object sender, EventArgs e)
        {
            Thread mythread = new Thread(Calculate);
            mythread.IsBackground = true;        //設置為後臺線程,程式關閉后進程也關閉,如果不設置true,則程式關閉,此線程還在內存,不會關閉
            mythread.Start();
        }
        private void Calculate()
        {
            Stopwatch stopwatch = Stopwatch.StartNew();
            progressBarWay.Maximum = 500;
            for (int i = 0; i < 500; i++)
            {
                Thread.Sleep(5);
                progressBarWay.Value = i;
            }
            stopwatch.Stop();
            long lSearchTime = stopwatch.ElapsedMilliseconds;
            MessageBox.Show(lSearchTime.ToString()+"毫秒");
        }
View Code

相关文章:

  • 2021-06-26
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-02
  • 2021-12-07
猜你喜欢
  • 2021-12-20
  • 2021-12-24
  • 2022-02-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案