这种方法有效时可以中断方法吗?

时间:2014-08-22 11:13:39

标签: c# multithreading events interrupt terminate

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

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

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

请给我一些建议。

3 个答案:

答案 0 :(得分:1)

如果您有权访问该方法,请执行一个标记来中止它并编写解决问题的方法。这是我所做的概念伪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
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

Abort call to unmanaged DLL

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

Using kernel32 CreateThread/TerminateThread inside Azure Worker Role

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

http://www.pinvoke.net/