我可以中断一个方法,而这个方法正在工作
本文关键字:方法 工作 一个 中断 我可以 | 更新日期: 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/