自学C#之路13——多线程

操作系统以进程(Process)的方式运行应用程序,进程不但包括应用程序的指 令流,也包括运行程序所需的内存、寄存器等资源。在一个进程中我们可以创建多个个线程(Threading)来实现多个任务“同时”进行的目标。

注:在单核 CPU 的计算机操 作系统将自动以“时间片轮转”的方式交替执行线程指令,多核心 CPU,使得线程能够真正的实现同步执行

在 C#中,线程由 System.Threading 命名空间中的 Thread 类实现。声明线程的语法与如下:

Thread workThread = new Thread(entryPoint);

其中 entryPoint 代表一个入口方法,线程的具体代码放在入口方法中,系统从入口方 法的第一句代码开始执行线程。

Thread 类的部分属性和方法

一个简单的例子,说明如何创建,开启,暂停,恢复一个简单的线程

        //创建互斥体
        //Mutex fileMutex = new Mutex(false, "MutexForTimeRecordFile");
        static AutoResetEvent fileMutex = new AutoResetEvent(false);
        private static bool State = true;
        private void EntryPoint()
        {
             int loop = 0;
             int sect = 0;
             float[] x = new float[31];
             float[] y = new float[31];
            Graphics g = this.CreateGraphics();
             //绘制图形 10000 遍,每隔 200 毫秒绘制一遍
             while (loop < 10000)
             {
                 if (!State)
                 {
                     fileMutex.WaitOne();
                 }
  
                sect = (sect + 1) % 25 + 1;
                //绘制图形
                for (int i = 0; i < sect; i++)
                {
                    x[i] = (float)(150 * Math.Cos(i * 2 * Math.PI / sect) + 550);
                    y[i] = (float)(150 * Math.Sin(i * 2 * Math.PI / sect) + 150);
                }
                for (int m = 0; m < sect - 1; m++)
                {
                    for (int n = 0; n < sect; n++)
                    {
                        g.DrawLine(Pens.Blue, x[m], y[m], x[n], y[n]);
                    }
                }
                //线程暂停 200 毫秒
                Thread.Sleep(200);
                //清除图形,以便重新绘制
                g.Clear(this.BackColor);
                loop++;
             } 
        }
        //声明工作线程
        Thread drawGraphThread;
        private void button1_Click(object sender, EventArgs e)
        {
            drawGraphThread = new Thread(EntryPoint);
             //启动线程
             drawGraphThread.Start();
             //设置按钮的有效性
             button1.Enabled = false;
             button2.Enabled = true;
             button3.Enabled = false;
             button4.Enabled = true; 
        }
        private void button2_Click(object sender, EventArgs e)
        {
            //暂停线程
           // drawGraphThread.Suspend();
            State = false;
            //设置按钮的有效性
            button1.Enabled = false;
            button3.Enabled = true;
            button4.Enabled = false; 
        }
        private void button3_Click(object sender, EventArgs e)
        {
            //恢复线程
           // drawGraphThread.Resume();
            State = true;
            fileMutex.Set();
            //设置按钮的有效性
            button1.Enabled = false;
            button2.Enabled = true;
            button4.Enabled = true; 
        }
        private void button4_Click(object sender, EventArgs e)
        {
            //中止线程
            drawGraphThread.Abort();
            //设置按钮的有效性
            button1.Enabled = true;
            button2.Enabled = false;
            button3.Enabled = false;
            button4.Enabled = false; 
        }

在.NET2.0 中,Suspend()函数和 Resume 函数已经过时.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值