【发布时间】:2011-04-28 11:15:35
【问题描述】:
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 语句之前的日志条目。但是 CheckIfAllModulesInitComplete 中的日志条目不存在于日志文件中
-
有没有可能实际上是对记录器的调用导致挂起?
-
@BugFinder:记录器模块相当稳定。我不认为挂在记录器中
-
我不是说它不稳定,但可能是它导致了锁定,并且没有返回结果。只是一个想法。特别是如果它并不总是很容易追踪
标签: c# .net multithreading invokerequired