iT邦幫忙

0

C#為何我的thread.isAlive總是false??

  • 分享至 

  • xImage
private void button2_Click(object sender, EventArgs e)
{
    th = new Thread(fun);
    th.Start();
}

private void button3_Click(object sender, EventArgs e)
{
    if(th.IsAlive) {
        label1.Text = "yes";
    }
    else
    {
        label1.Text = "no";
    }
}

fun是空的..我總是得到"no"..我thread開始它了..也沒有中斷它..為何我的thread總不是活著呢?

fun() 裡面 是不是 沒有一個 執行迴圈
如果 直接執行完畢 return 了
那 th.IsAlive 一定是 false
rabbit iT邦新手 4 級 ‧ 2022-05-04 22:10:15 檢舉
謝謝...原來是線程的function也要一直有事做才活著阿@@...沒事做就停了fales....了解謝謝...你可以用回答變最佳解^^
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2022-12-27 07:59:37

當button2_Click被點擊時。如果在點擊button3_Click之前該Thread執行完畢,則Thread.IsAlive 回傳 false。

另外,如果Thread已被垃圾收集。在這種情況下,Thread.IsAlive也會回傳false。

using System;
using System.Threading;
using System.Windows.Forms;

namespace ThreadExample
{
    public partial class Form1 : Form
    {
        private Thread th;

        public Form1()
        {
            InitializeComponent();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (!th.IsAlive)
            {
                th = new Thread(Fun);
                th.Start();
            }
        }

        private void button3_Click(object sender, EventArgs e)
        {
            if(th.IsAlive) {
                label1.Text = "yes";
            }
            else
            {
                label1.Text = "no";
            }
        }

        private void Fun()
        {
            // This method will be executed by the new thread
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("Thread running: " + i);
                Thread.Sleep(1000);
            }
        }
    }
}

我要發表回答

立即登入回答