Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.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_Events_Interrupt_Terminate - Fatal编程技术网

C# 当此方法工作时,我可以中断该方法吗?

C# 当此方法工作时,我可以中断该方法吗?,c#,multithreading,events,interrupt,terminate,C#,Multithreading,Events,Interrupt,Terminate,我们可以在方法工作时中断它吗?因为我有一个线程中的方法,我必须在按钮点击时中断该方法。我该怎么做 我尝试了Abort()方法,但它不起作用。因为Abort()是一个没有任何garanty行为的方法。我的意思是,如果我们使用那个方法,我们不确定方法的终止 我只有一个方法名,比如DOMMETHONTHEED(),因为我使用C++编写的DLL。因此,我没有方法的源代码。如果我点击一个按钮,这个方法必须终止 请给我一些建议。您可以在线程上使用中止,而不是在方法上使用中止。如果要中断某个方法,请使用ret

我们可以在方法工作时中断它吗?因为我有一个线程中的方法,我必须在按钮点击时中断该方法。我该怎么做

我尝试了Abort()方法,但它不起作用。因为Abort()是一个没有任何garanty行为的方法。我的意思是,如果我们使用那个方法,我们不确定方法的终止


<>我只有一个方法名,比如DOMMETHONTHEED(),因为我使用C++编写的DLL。因此,我没有方法的源代码。如果我点击一个按钮,这个方法必须终止


请给我一些建议。

您可以在线程上使用中止,而不是在方法上使用中止。如果要中断某个方法,请使用return。

如果您有权访问该方法,请执行一个标志以中止该方法,并对问题进行编码。这是一个概念上的伪C#示例,我会这样做:

private bool aborted = false;

public ResultClass Method()
{
    for (i = 0; i < int.MaxValue && !aborted; i++)
    {
      // ...
    }

    if (aborted)
    {
        return null;
    }

    return new ResultClass(...);
}

public void Abort()
{
    aborted = true;
}

我已经解决了这个问题。如果有人有这样的问题,也许可以在下面几页找到答案

我在下面的链接中得到了一些关于我的问题的信息

我找到了一个关于我解决问题的方法的例子

你可以使用这个页面。这个页面包含很多关于PInvoke的代码部分


发布一些代码:很难确定线程的工作方式。。因为实现方法的可能性非常小,
return
的可能副本可以在方法内部使用。你怎么能从方法之外做到这一点?如果我使用这个代码,我就无法逃脱到方法之外。此方法仅可用,而不是Abort()方法。我说的对吗?我只有一个方法名,比如DoSomething()。如果我点击一个按钮,这个方法必须终止,最好使用
ManualResetEvent
或类似的方法,或者
Interlocked.Exchange/Interlocked.Read
是的,它可能更好,但是当涉及多线程时,必须考虑性能和可读性/可维护性,因此,无论是简单的还是复杂的解决方案,都完全取决于许多因素,如何最好地解决此类问题。
try {
    // abortable code
}
finally
{
    // clean-up resources
}