c#多线实例

 

using System;
using System.Threading;
using System.Text;

namespace ControlThread
{
    class Program
    {
        private static void DisplayMessage()
        {

            // 在控制台上重复显示一条消息.
            while (true)
            {

                try
                {

                    Console.WriteLine("{0} : 第二个线程正在运行,请输入"
                        + " (S)uspend, (R)esume, (I)nterrupt, or (E)xit.",
                        DateTime.Now.ToString("HH:mm:ss.ffff"));

                    // 睡眠 2 秒种.
                    Thread.Sleep(2000);

                }
                catch (ThreadInterruptedException)
                {

                    // 线程被中断. 捕获到ThreadInterruptedException异常后
                    // 示例会执行合适的行为并且继续执行.
                    Console.WriteLine("{0} : 第二个线程被中断.",
                        DateTime.Now.ToString("HH:mm:ss.ffff"));

                }
                catch (ThreadAbortException abortEx)
                {

                    // ThreadAbortException对象.
                    //线程调用Thread.Abort后所提供的ExceptionState属性
                    //本例中是包含了一个终止原因的字符串
                    Console.WriteLine("{0} : 第二个线程被终止. ({1})",
                        DateTime.Now.ToString("HH:mm:ss.ffff"),
                        abortEx.ExceptionState);

                    // 尽管 ThreadAbortException已经被处理,
                    //运行时还是会抛出一个异常以确保线程被终止.

                }
            }

        }

        static void Main(string[] args)
        {
            // 创建一个新的线程对象,
            // 传递给他一个执行显示消息方法的ThreadStart委托实列.
          
            Thread thread = new Thread(new ThreadStart(DisplayMessage));

            Console.WriteLine("{0} : 启动第二个线程.",
                DateTime.Now.ToString("HH:mm:ss.ffff"));

            // 启动第二个线程.
            thread.Start();

            // 循环处理用户输入的命令.
            char command = ' ';

            do
            {

                string input = Console.ReadLine();
                if (input.Length > 0) command = input.ToUpper()[0];
                else command = ' ';

                switch (command)
                {

                    case 'S':
                        // 挂起第二个线程.
                        Console.WriteLine("{0} : 挂起第二个线程.",
                            DateTime.Now.ToString("HH:mm:ss.ffff"));
                        thread.Suspend();
                        break;

                    case 'R':
                        // 继续第二个线程执行.
                        try
                        {
                            Console.WriteLine("{0} : 继续第二个线程执行.",
                                DateTime.Now.ToString("HH:mm:ss.ffff"));
                            thread.Resume();
                        }
                        catch (ThreadStateException)
                        {
                            Console.WriteLine("{0} : 线程并没有被挂起.",
                                DateTime.Now.ToString("HH:mm:ss.ffff"));
                        }
                        break;

                    case 'I':
                        // 中断第二个线程.
                        Console.WriteLine("{0} : 中断第二个线程.",
                            DateTime.Now.ToString("HH:mm:ss.ffff"));
                        thread.Interrupt();
                        break;

                    case 'E':
                        // 终止第二个线程,并且为已经中止的线程传递一个状态对象
                        // 本例是一条消息.
                        Console.WriteLine("{0} : 正在终止第二个线程.",
                            DateTime.Now.ToString("HH:mm:ss.ffff"));

                        thread.Abort("终止示例.");

                        // 等待第二个线程结束.
                        thread.Join();
                        break;
                }
            } while (command != 'E');

            // 等待继续.
            Console.WriteLine("主方法结束. 按下回车键.");
            Console.ReadLine();

        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄贤秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值