gpt4 book ai didi

c# - InvokeRequired 挂起

转载 作者:太空宇宙 更新时间:2023-11-03 11:37:19 24 4
gpt4 key购买 nike

UI 线程偶尔会在以下方法中的语句 'if (this.InvokeRequired)' 处挂起。

你能帮我找出问题的原因吗

  public void OnModuleInitializationCompleted(object sender, EventArgs e)
{
ModuleStatusWindow.Logger.LogMessage("OnModuleInitializationCompleted", LogMessageType.Information, "Received {0}", (sender as IModule).Name);
if (this.InvokeRequired)
{
this.BeginInvoke(new ECEventsHandler(OnModuleInitializationCompleted), sender, e);
}
else
{
CheckIfAllModulesInitComplete();
}
}

private void CheckIfAllModulesInitComplete()
{
ModuleStatusWindow.Logger.LogMessage("CheckIfAllModulesInitComplete", LogMessageType.Information, "Enter >>");
this._moduleStatusGrid.DataSource = this._moduleDataList.ToArray();
this._moduleStatusGrid.Invalidate();
ModuleStatusWindow.Logger.LogMessage("CheckIfAllModulesInitComplete", LogMessageType.Information, "Updated grid control...");
if (this._moduleDataList.Count(moduleData => !moduleData.IsInitOver) == 0)
{
this._footprint.DeActivate();
ModuleStatusWindow.Logger.LogMessage("CheckIfAllModulesInitComplete", LogMessageType.Information, "Stopping message listenr...");
ClientMessageListner.Stop();
ModuleStatusWindow.Logger.LogMessage("CheckIfAllModulesInitComplete", LogMessageType.Information, "Closing Window...");
this.Close();
}
ModuleStatusWindow.Logger.LogMessage("CheckIfAllModulesInitComplete", LogMessageType.Information, "Leave <<");
}

最佳答案

我认为 InvokeRequired 不太可能挂起。 BeginInvoke 可能会,但我认为不会。

一些想法。

BeginInvoke 运行正常,但 UI 线程很忙,因此它永远无法运行 OnModuleInitializationComplete。这个线程继续做什么?它会在某个时刻开始等待(比如调用 EndInvoke)吗?

InvokeRequired 返回 false,您的 CheckIfAllModulesInitComplete 方法挂起。

我会在 OnModuleInitializationComplete 中添加更多日志记录,以显示 If 已采用的路径,然后使用新信息更新您的问题。
如果您还可以提供有关此方法的代码的更多详细信息,它可能会有用,尤其是在等待此方法完成的任何地方。

关于c# - InvokeRequired 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5817716/

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