我可以中断一个方法,而这个方法正在工作

本文关键字:方法 工作 一个 中断 我可以 | 更新日期: 2023-09-27 18:19:02

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

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

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

请给我一些建议

我可以中断一个方法,而这个方法正在工作

如果您可以访问该方法,则实现一个中止该方法的标志,并围绕问题编写代码。这是我要做的一个概念性伪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;
}

这可能看起来像很多代码,但它更干净,你可以清理和处理你需要的东西。相反,终止线程是一件很麻烦的事情,并且只有在线程达到WaitSleepJoin状态时才会发生。

如果你真的需要中止,至少这样做:

try {
    // abortable code
}
finally
{
    // clean-up resources
}

你可以在线程上而不是在方法上使用Abort。如果你想中断一个方法,使用return.

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

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

中止对非托管DLL的调用

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

在Azure Worker角色中使用kernel32 CreateThread/TerminateThread

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

http://www.pinvoke.net/