如何停止C#应用程序的当前进程并启动另一个功能

如何停止C#应用程序的当前进程并启动另一个功能,c#,multithreading,c#-4.0,c#-3.0,C#,Multithreading,C# 4.0,C# 3.0,我在解释我的场景,我有一个功能,打印时打印1到10000,我必须停止进程,让用户知道当前的I值,如果用户按enter键,它应该再次继续 我正在使用 if ((Console.KeyAvailable) && (Console.ReadKey(true).Key == ConsoleKey.Escape)) 但是,这不会使我的任务复杂化,因为我正在使用线程,即使我设法中断了这个线程,子线程开始执行,我只想停止整个执行过程一小会儿,然后执行另一个函数。检查一下,特别是如何实现取消

我在解释我的场景,我有一个功能,打印时打印1到10000,我必须停止进程,让用户知道当前的I值,如果用户按enter键,它应该再次继续

我正在使用

if ((Console.KeyAvailable) && (Console.ReadKey(true).Key == ConsoleKey.Escape))
但是,这不会使我的任务复杂化,因为我正在使用线程,即使我设法中断了这个线程,子线程开始执行,我只想停止整个执行过程一小会儿,然后执行另一个函数。

检查一下,特别是如何实现取消


您基本上需要在循环内部检查取消是否挂起。如果是,则退出循环。

如果您正在使用线程。你可以使用这种代码

// Start
thread = new Thread(new ThreadStart(YourCommand));
thread.Start();

// Pause
if (thread != null)
{
thread.Suspend();
}

//Continue
if (thread != null)
{
thread.Resume();
}

//Alive
if (thread != null)
{
    if (thread.IsAlive)
    {
     thread.Abort();
    }    
}

或者你可以使用timer…

你可以使用ManualResetEvents之类的WaitHandles-这其实并不难,你可以给出任何关于WaitHandles的链接,我的whileloop与此类似,while(count!=0){if((Console.KeyAvailable)和((Console.ReadKey(true.Key==ConsoleKey.Escape))break;function_temp();}在函数temp中,我启动了一个新线程。您可能应该显示更多的代码,您想做的应该是相当简单的。关于
BackgroundWorker
:您可以更改此代码以支持协作取消吗?您应该避免线程中止,请参阅此答案上的链接了解原因: