如何创建线程

本文关键字:线程 创建 何创建 | 更新日期: 2024-07-23 02:01:43

当我点击按钮1时应该打印A s,但当我单击按钮2时需要停止线程1并需要启动线程2,这里有什么问题请帮助我

    private void button1_Click(object sender, EventArgs e)
    {
        if (thread2.IsAlive)
        {
            thread2.Suspend();
        }
        thread1 = new Thread(threadOne);
        thread1.Start();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        if (thread1.IsAlive)
        {
            thread1.Suspend();
        }
        thread2 = new Thread(threadTwo);
        thread2.Start();
    }
    private void threadOne() {
        for (int i=0; i < 20; i++ )
        {
            Console.Write("A");
            Thread.Sleep(500);
        }
    }
    private void threadTwo()
    {
        for (int i = 0; i < 20; i++)
        {
            Console.Write("B");
            Thread.Sleep(500);
        }
    }

如何创建线程

正如其他海报正确指出的那样,有很多错误。我想补充一下:

1) 商业级软件中的大多数线程在应用程序的生命周期内永远不会终止——它们被写为具有阻塞调用的无限循环,等待来自其他线程或I/O操作的某种信号。

2) 连续创建/终止/销毁线程对象成本高昂,难以控制,调试困难,不可靠,通常会造成痛苦。

3) 如果您的多线程代码包含以下任何内容:

Suspend()
Resume(), (except in some thread ctors)
Join()
Abort()
IsAlive()

你可能应该再想想:)

我知道你只是在学习,但有时最好在漏洞变大之前修补一下:)

您正在Button Click事件中创建Thread的实例,因此检查threadX.IsAlive的if语句将抛出错误报告null引用异常

因此,请创建thread1&2加载

同时检查null。使用Abort()方法而不是Suspend(),因为每次都要创建一个新线程。

private void button1_Click(object sender, EventArgs e)
    {
        if (thread2!=null && thread2.IsAlive)
        {
            thread2.Abort();
        }
        thread1 = new Thread(threadOne);
        thread1.Start();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        if (thread1!=null && thread1.IsAlive)
        {
            thread1.Abort();
        }
        thread2 = new Thread(threadTwo);
        thread2.Start();
    }