[英]Stop a thread if it takes too long
我是Windows Phone开发的新手,我正在尝试使用C#创建Windows Phone应用程序
Thread t = new Thread(doaheavywork);
t.Start();
if (!t.Join(1000)) // give the operation 1s to complete
{
t.Abort();
}
我无法更改doaheavywork功能。
我只需要在1或2秒钟内将结果删除即可,因为有时它可能会运行很长时间。
我读过使用中止是错误的方法。
我在PhotoChooserTask完整功能中使用以上功能。 第一次运行执行正常。 也就是说,当我单击按钮选择照片时,doaheavywork功能不会超过1秒。 但是,如果我第二次尝试,则PhotoChooserTask只会引发异常并停止。
是因为我在第一次运行中中止了流程吗? 还是其他? 还有其他方法吗?
.Abort()
导致线程被完全破坏。 如果像示例一样每次都生成一个新线程,那么它将起作用。 但是,如果使用相同的t
对象,则需要创建一个新的线程对象,因此无法在.Start()
终止的线程上运行.Start()
。
但是,您正在中止线程这一事实令人担忧。 如果该应用程序花费了2秒以上的时间,将会发生什么情况。 如果您要向用户显示,请等待,所需时间比预期更长。 在if
块中执行此操作即可。 .Join()
即使无法成功加入也不会停止线程。
编辑
在重写本节时,您可能要考虑两个选项:
任务似乎是您方案中的合适解决方案。
一种方法可能是考虑使用一个Task,并从CancellationTokenSource传入一个CancellationToken,并在特定的时间间隔内实例化2秒。 这样,当指定的时间过去后,将向传递给Task的CancellationToken发出信号,然后可以采取适当的措施。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.