【问题标题】:How can i kill thread when it in while loop C#在while循环C#中如何杀死线程
【发布时间】:2018-04-04 04:37:02
【问题描述】:

我有一个 while 循环来检查真/假。我也有 if 块。 if 块从 300 倒数到 0。我想在它是 0 和另外两个地方时杀死线程。


  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();

}

【问题讨论】:

  • 有一个类CancellationToken 供线程使用。
  • 您应该使用计时器,而不是使用 Sleep(1000) 的 while 循环。

标签: c# multithreading while-loop


【解决方案1】:

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

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");
}

【讨论】:

    【解决方案2】:
    return;
    

    可以——你只需要退出线程运行的方法;

    【讨论】:

    • 如果我使用返回;我怎么能打破; ?我很困惑。
    • 回报就是休息。将线程代码拆分为单独的方法并从线程初始化中调用该函数,这样会更有意义。
    猜你喜欢
    • 2012-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2011-06-29
    • 2013-02-10
    • 2011-02-13
    • 2013-08-04
    • 2017-11-11
    相关资源
    最近更新 更多