线程尚未启动
本文关键字:启动 线程 | 更新日期: 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或更高版本,你也可以考虑使用支持取消的任务并行库。下面是一个例子: