线程尚未启动

本文关键字:启动 线程 | 更新日期: 2023-09-27 18:07:48

我正在编写一个基本的线程程序。我对c#和WPF比较陌生。我基本上想做的是在线程中运行一个方法,这样我就可以在方法运行时获得输入。如果接收到这样的输入,程序应该告诉线程完成当前正在处理的对象并停止。

我的问题是,无论如何我都不能得到线程已经启动的指示。甚至当我尝试让线程运行一个无限循环时,比如

while(true);

仍然没有迹象表明线程正在运行,当尝试thread.join时,我得到一个ThreadStateException。

我试过检查

thread.IsAlive

我试过了

thread.ThreadState == ThreadState.Running

我知道以上是不正确的,但我绝望了。

按如下方式构造线程

Thread t = new Thread(new ThreadStart(methodToRun));
t.Start();

我确信方法正在运行,但是线程没有给出它正在运行的指示。

在我的研究中,我发现与这个错误有关的是当尝试加入一个线程时,线程尚未启动这可能我不明白,但问题似乎是,他在加入和终止之前中止,然后重新开始,我在任何时候中止我的程序中的线程。

谢谢你所有的帮助,我会张贴更多的信息需要或编辑这篇文章,以适应规格。我很抱歉,因为我是新人。

线程尚未启动

尝试使用Task类而不是Thread类,因为它更容易和更最新。您可以像这样简单地异步调用方法:

Task.Factory.StartNew(methodToRun);

此外,这些Task对象可以很容易地取消使用CancellationToken(从链接页面):

var tokenSource2 = new CancellationTokenSource();
CancellationToken ct = tokenSource2.Token;
var task = Task.Factory.StartNew(() =>
{
    // Were we already canceled?
    ct.ThrowIfCancellationRequested();
    bool moreToDo = true;
    while (moreToDo)
    {
        // Poll on this property if you have to do 
        // other cleanup before throwing. 
        if (ct.IsCancellationRequested)
        {
            // Clean up here, then...
            ct.ThrowIfCancellationRequested();
        }
    }
}, tokenSource2.Token); // Pass same token to StartNew.
tokenSource2.Cancel();

您可以从MSDN上的任务取消页面找到更多信息。

您可以在启动线程时设置一个简单的标志为true。如果你使用的是。net 4.0或更高版本,你也可以考虑使用支持取消的任务并行库。下面是一个例子: