C# 如果需要的时间太长,请停止线程
我是Windows Phone开发的新手,我正在尝试使用C创建一个Windows Phone应用程序# 我无法更改重作业功能 我只需要在1或2秒内计算结果,因为有时它可能会运行很长时间 我读过使用abort是错误的方法 我在PhotoChooserTask complete函数中使用上述函数。第一次运行执行良好。也就是说,当我点击按钮选择一张照片时,doaheavywork函数不会超过1秒。但是如果我第二次尝试,PhotoChooserTask只会抛出一个异常并停止 是因为我在第一次运行时中止了进程吗?还是别的什么?还有其他方法吗?C# 如果需要的时间太长,请停止线程,c#,multithreading,windows-phone-8,thread-abort,C#,Multithreading,Windows Phone 8,Thread Abort,我是Windows Phone开发的新手,我正在尝试使用C创建一个Windows Phone应用程序# 我无法更改重作业功能 我只需要在1或2秒内计算结果,因为有时它可能会运行很长时间 我读过使用abort是错误的方法 我在PhotoChooserTask complete函数中使用上述函数。第一次运行执行良好。也就是说,当我点击按钮选择一张照片时,doaheavywork函数不会超过1秒。但是如果我第二次尝试,PhotoChooserTask只会抛出一个异常并停止 是因为我在第一次运行时中止了
.Abort()
会完全销毁线程。如果您每次都像示例中那样生成一个新线程,那么它就会工作。但是,如果使用相同的t
对象,则需要创建新的线程对象,不能在中止的线程上运行.Start()
然而,您正在中止线程这一事实令人担忧。当应用程序的运行时间超过2秒时会发生什么情况。如果您要向用户显示,请稍候,所用时间比预期的长。在if
块中执行此操作是执行此操作的地方.Join()
即使线程无法加入,也不会停止线程
编辑
您在重写本节时可能需要考虑2个选项:
.Abort()
会导致线程完全销毁。如果您每次都像示例中那样生成一个新线程,那么它就会工作。但是,如果使用相同的t
对象,则需要创建新的线程对象,不能在中止的线程上运行.Start()
然而,您正在中止线程这一事实令人担忧。当应用程序的运行时间超过2秒时会发生什么情况。如果您要向用户显示,请稍候,所用时间比预期的长。在if
块中执行此操作是执行此操作的地方.Join()
即使线程无法加入,也不会停止线程
编辑
您在重写本节时可能需要考虑2个选项:
.Abort()
会导致线程完全销毁。如果您每次都像示例中那样生成一个新线程,那么它就会工作。但是,如果使用相同的t
对象,则需要创建新的线程对象,不能在中止的线程上运行.Start()
然而,您正在中止线程这一事实令人担忧。当应用程序的运行时间超过2秒时会发生什么情况。如果您要向用户显示,请稍候,所用时间比预期的长。在if
块中执行此操作是执行此操作的地方.Join()
即使线程无法加入,也不会停止线程
编辑
您在重写本节时可能需要考虑2个选项:
.Abort()
会导致线程完全销毁。如果您每次都像示例中那样生成一个新线程,那么它就会工作。但是,如果使用相同的t
对象,则需要创建新的线程对象,不能在中止的线程上运行.Start()
然而,您正在中止线程这一事实令人担忧。当应用程序的运行时间超过2秒时会发生什么情况。如果您要向用户显示,请稍候,所用时间比预期的长。在if
块中执行此操作是执行此操作的地方.Join()
即使线程无法加入,也不会停止线程
编辑
您在重写本节时可能需要考虑2个选项:
任务在您的场景中似乎是合适的解决方案。
< P>一种方法可能是考虑使用一个任务,并在一个特定的时间段- 2秒实例化一个取消的TokStudioToSurCE中传递一个取消标记。这样,当指定的时间已过时,将通知传递给任务的CancellationToken,然后可以采取适当的操作 > P>一种方法可能是考虑使用一个任务,并将一个取消令牌传递给它,从一个特定的时间段- 2秒实例化的取消ToCurtoStokSurCE。这样,当指定的时间已过时,将通知传递给任务的CancellationToken,然后可以采取适当的操作 > P>一种方法可能是考虑使用一个任务,并将一个取消令牌传递给它,从一个特定的时间段- 2秒实例化的取消ToCurtoStokSurCE。这样,当指定的时间已过时,将通知传递给任务的CancellationToken,然后可以采取适当的操作 > P>一种方法可能是考虑使用一个任务,并将一个取消令牌传递给它,从一个特定的时间段- 2秒实例化的取消ToCurtoStokSurCE。这样,当指定的时间已过时,将通知传递给任务的CancellationToken,然后可以采取适当的操作没有看到你的例外,我们就不能帮助你了。它能和你有关吗?考虑使用<代码> TPL < /代码>。这个解决方案你不应该在线程中初始化,除非你知道你在做什么。Threadpool是你的朋友(但TPL是你的BFF)Thread t = new Thread(doaheavywork);
t.Start();
if (!t.Join(1000)) // give the operation 1s to complete
{
t.Abort();
}