在设置控件可见性时,我有时会得到这样的结果:
CRASH! Failed to refresh job control:
Exception:NullReferenceException
Message:Object reference not set to an instance of an object.
Source: System.Windows.Forms
TargetSite: SetVisibleCore
StackTrace: at System.Windows.Forms.ToolStripControlHost.SetVisibleCore(Boolean visible)
at System.Windows.Forms.ToolStripItem.set_Visible(Boolean value)
at Cwc.WaterWorks.Console.frmMain.SetToolStripOptionalButtons()
at Cwc.WaterWorks.Console.frmMain.UpdateToolStrip(ToolStripButton toolStripButton)
at Cwc.WaterWorks.Console.frmMain.RefreshJobControl(Boolean fetch)从以下位置调用:
private void SetToolStripOptionalButtons()
{
NewJobButtonsVisibility(newJobStripButton.Checked);
JobListButtonsVisibility(jobListStripButton.Checked);
jumpToJob.Visible = !newJobStripButton.Checked;
if (newJobStripButton.Checked)
{
JobCreateStatus(false);
uxLockedToolStrip.Visible = false;
HideJobControlButtons();
}
else if (jobListStripButton.Checked)
{
UpdateFilterStatus();
HideJobControlButtons();
}
else if (controlStripButton.Checked)
{
ShowJobControlButtons();
}
findCustomerStripButton.Enabled = newJobStripButton.Checked && basis2ServiceLayer.Basis2Status.IsConnected==true;
filterStripDropDown.Enabled = jobListStripButton.Checked;
}你知道为什么吗?
发布于 2013-04-24 07:40:48
我可以用一个小的测试表单重现这个崩溃:
public partial class Form1 : Form {
public Form1() {
var strip = new ToolStrip();
test = new ToolStripControlHost(new TextBox());
strip.Items.Add(test);
this.Controls.Add(strip);
}
protected override void OnMouseClick(MouseEventArgs e) {
test.Dispose();
test.Visible = true;
}
ToolStripItem test;
}单击该窗口,然后单击kaboom:
System.NullReferenceException was unhandled
Message="Object reference not set to an instance of an object."
Source="System.Windows.Forms"
StackTrace:
at System.Windows.Forms.ToolStripControlHost.SetVisibleCore(Boolean visible)
at WindowsFormsApplication1.Form1.OnMouseClick(MouseEventArgs e) in C:\Users\hpass_000\AppData\Local\Temporary Projects\WindowsFormsApplication1\Form1.cs:line 21
...
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at WindowsFormsApplication1.Program.Main() in C:\Users\hpass_000\AppData\Local\Temporary Projects\WindowsFormsApplication1\Program.cs:line 15因此,您正在尝试在释放Toolstrip项之后对其进行更新。除此之外,我们不清楚你的程序是如何进入这种状态的。线程问题的概率非常高,即使在用户关闭窗口后,线程仍会继续调用。this answer的主题。
你真的应该解决核心问题,但Q&D修复可能会解决你的崩溃是:
private void SetToolStripOptionalButtons()
{
if (this.Disposed) return;
// etc...
}尽管它现在很可能会在其他地方崩溃。
https://stackoverflow.com/questions/3709393
复制相似问题