0

我在 C# 4.0 中创建了一个线程,想知道如何检查它是否正在运行?

4

2 回答 2

6

您可以使用Thread.IsAlive来检查 aThread是否正在运行。

话虽如此,如果您使用的是 C# 4,手动创建“线程”并不是一个好主意。您应该考虑使用 TPL 和Task/Task<T>类,因为这提供了一个更简洁的模型,可以在任务完成后附加要运行的工作、从操作中提取数据等。

于 2013-10-23T17:03:33.103 回答
0

我使用 Mutex 来验证这一点。有时只需使用 Thread 验证 Thread 是否处于活动状态。如果您在后台运行,IsAlive 是不安全的。

尝试这个:

private void btnDoSomething()
{
    try
    {
        string nameThread = "testThreadDoSomething";

        var newThread = new Thread(delegate() { this.DoSomething(nameThread); });
        newThread.IsBackground = true;
        newThread.Name = nameThread;
        newThread.Start();

        //Prevent optimization from setting the field before calling Start
        Thread.MemoryBarrier();
    }
    catch (Exception ex)
    {

    }
}

public void DoSomething(string threadName)
{
    bool ownsMutex;

    using (Mutex mutex = new Mutex(true, threadName, out ownsMutex))
    {
        if (ownsMutex)
        {
            Thread.Sleep(300000); // 300 seconds

            if (Monitor.TryEnter(this, 300))
            {
                try
                {
                    // Your Source
                }
                catch (Exception e)
                {
                    string mensagem = "Error : " + e.ToString();
                }
                finally
                {
                    Monitor.Exit(this);
                }
            }

            //mutex.ReleaseMutex();
        }
    }
}
于 2013-10-23T17:13:36.930 回答