如何在while循环中杀死线程C#

时间:2017-10-23 15:01:55

标签: c# multithreading while-loop

我有一个while循环,它检查true / false。而且我有if block.if块计数到300到0.我想在它的0和另外两个地方时杀死线程。我看了论坛,但我的方法看起来有点不同。但我试过中止但没有工作。如果我的帖子有错误请编辑.thx!

            void Test()
            {

                Thread thread = new Thread(() =>
                            {
                                try
                                {
                                    int countdown = 300;
                                    while (true)
                                    {
                                        Thread.Sleep(1000);
                                        paymentService.CheckPayment(pdId);
                                        if (result.Complete == false)
                                        {
                                            countdown--;
                                            if (countdown == 1)
                                            {
                                                //kill thread
                                            }
                                        }
                                        if (result.Complete == true)
                                        {
                                            //kill thread
                                            NavigationService.Navigate(new Uri("Pages/success.xaml", UriKind.Relative));
                                        }
                                    }
                                }
                                catch (Exception)
                                {
                                    //kill thread
                                    Application.Current.Shutdown();
                                }
                            });
                thread.Start();

            }

2 个答案:

答案 0 :(得分:5)

return;

会做 - 你只需要退出Thread运行的方法;

答案 1 :(得分:2)

您可能需要使用任务而不是线程。这是一个可能的解决方案:

void Main()
{
    Test(); 
}

void Test()
{
    var t = new Task(() => {
        var rnd = new Random(DateTime.Now.Millisecond);
        int countdown = 5;
        while (true)
        {
            Thread.Sleep(10);
            var nextRand = rnd.Next(5);
            Console.WriteLine(nextRand);
            if (nextRand == 0)
            {
                countdown--;
                if (countdown == 1) return;
            }
        }
    });
    var t2 = t.ContinueWith(_ => { });

    t.Start();
    t2.Wait();
    Console.WriteLine("Thread ended");
}