Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果需要的时间太长,请停止线程_C#_Multithreading_Windows Phone 8_Thread Abort - Fatal编程技术网

C# 如果需要的时间太长,请停止线程

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只会抛出一个异常并停止 是因为我在第一次运行时中止了

我是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();
    }