gpt4 book ai didi

c# - 方法被调用后执行两次

转载 作者:行者123 更新时间:2023-11-30 13:38:22 24 4
gpt4 key购买 nike

我遇到了无法解决的“调用”问题。我会尽可能详尽地描述我的内容,但我是新手,所以请多多包涵,如果您需要更多信息,请告诉我。

我有一个正在运行的后台线程,当出现提示时,它会禁用在主线程上创建的表单上的一堆复选框。为了做到这一点,我需要使用 invoke 和委托(delegate)来安全地跨线程,但我一定是做错了。最重要的是,当我在调试器中检查它时,我发现如果 InvokeRequired,它会两次运行代码的 ACTION 部分。我可以通过用 else 括起 ACTION 来解决这个问题,虽然它不会通过 else 运行两次,但它仍然会尝试再次通过该方法。

delegate void ManualCurtainShuttoffHandler();
public void ManualCurtainShutoff()
{
if (InvokeRequired)
{
Invoke(new ManualCurtainShuttoffHandler(ManualCurtainShutoff));
}
// ACTION: Disable check boxes
}

我只想知道为什么它会两次运行该方法。如果您需要更多信息,请告诉我,我很乐意与您分享。

最佳答案

仅仅因为您调用了Invoke,它不会停止当前方法的执行。一个快速简单的解决方案是在调用 Invoke 之后简单地 return:

delegate void ManualCurtainShuttoffHandler();
public void ManualCurtainShutoff()
{
if (InvokeRequired)
{
Invoke(new ManualCurtainShuttoffHandler(ManualCurtainShutoff));
return;
}
// ACTION: Disable check boxes
}

这将跳过在后台线程上运行的 ManualCurtainShutoff 的其余执行,同时仍然促进方法的执行主线程。

关于c# - 方法被调用后执行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17309924/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com