当我尝试运行以下代码时会导致未处理的异常。用我发现的代码进行了大量的推文,如果注释掉MessageBox.Show行,问题就会消失!不同寻常的是,我在代码的其他部分的其他catch {}段中使用了MessageBox.Show语句,没有任何问题。我的问题是,是否有人知道它导致异常的原因?
(P.s Reports_Group_Chooser是一个ComboBox)
守则:
string GroupName= (string)Reports_Group_Chooser.SelectedItem;
byte[] ConfigBytes= new byte[]{};
try{
ConfigBytes= File.ReadAllBytes("Reports/"+ GroupName.ToLower() +".grp");
}catch{
MessageBox.Show("The file for this group is missing. Cannot continue.","File Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
Reports_Group_Chooser.Items.RemoveAt(NewGroup);
Reports_Group_Chooser.SelectedIndex= 0;
}
错误(大部分错误):
未处理的例外情况: System.NullReferenceException:Object 引用未设置为的实例 对象在 System.Windows.Forms.ComboBox.DropDownListBoxFinished ()[0x00000] at(包装器 远程-调用,以检查) System.Windows.Forms.ComboBox:DropDownListBoxFinished () 在 System.Windows.Forms.ComboBox + ComboListBox.HideWindow ()[0x00000] at System.Windows.Forms.ComboBox + ComboListBox.OnMouseUp (System.Windows.Forms.MouseEventArgs e)[0x00000] at System.Windows.Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) [0x00000]在 System.Windows.Forms.Control.WndProc (System.Windows.Forms.Message& m) [0x00000]在 System.Windows.Forms.ComboBox + ComboListBox.WndProc (System.Windows.Forms.Message& m) [0x00000]在 System.Windows.Forms.Control的+ ControlWindowTarget.OnMessage (System.Windows.Forms.Message& m) [0x00000]在 System.Windows.Forms.Control的+ ControlNativeWindow.WndProc (System.Windows.Forms.Message& m) [0x00000]在 System.Windows.Forms.NativeWindow.WndProc (IntPtr hWnd,Msg msg,IntPtr wParam, IntPtr lParam)[0x00000] at System.Windows.Forms.XplatUIX11.DispatchMessage (System.Windows.Forms.MSG& msg) [0x00000]在 System.Windows.Forms.XplatUI.DispatchMessage (System.Windows.Forms.MSG& msg) [0x00000]在 System.Windows.Forms.Application.RunLoop (布尔模态, System.Windows.Forms.ApplicationContext 上下文)[0x00000]
任何帮助表示赞赏 迈克尔
UPDATE 这是我的代码中一个工作MessageBox.Show的例子,它不会导致错误:
GlobalConfig= new Dictionary<string, string>();
byte[] ConfigBytes= new byte[]{};
try{
ConfigBytes= System.IO.File.ReadAllBytes("Config.cfg");
}catch{
MessageBox.Show("Global ettings file does not exist. Cannot continue.","File Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
GlobalConfig.Add("StoreNumber","");
GlobalConfig.Add("Error","Y");
}
更新更新:
似乎问题只是在一个组合框事件中有MessageBox.Show: 以下代码仍然显示相同的错误:
private void Reports_GroupChanged(object sender,EventArgs e){
MessageBox.Show("The file for this group is missing. Cannot continue.","File Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
答案 0 :(得分:1)
当您显示MessageBox时,它不会暂停您的应用程序。相反,应用程序继续从操作系统中抽取消息。在影响中,这允许您的UI继续处理。
这里可能发生的事情是,当MessageBox显示时,ComboBox仍在处理鼠标按钮消息和空引用。请尝试拨打以下电话。
System.Diagnostics.Debugger.Break();
答案 1 :(得分:0)
先修复错误。
Reports_Group_Chooser.SelectedIndex= 0;
Reports_Group_Chooser.Items.RemoveAt(NewGroup);
MessageBox.Show("The file for this group is missing. Cannot continue.","File Error",MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
答案 2 :(得分:0)
您应该在显示消息之前解决导致失败的问题。
以下是我的例子。
失败是由将null对象转换为字符串引起的:
string str = dgv[e.ColumnIndex, e.RowIndex].Value.ToString();
然后在catch语句中,我尝试显示消息并将以前的值分配给单元格:
MessageBox.Show(String.Format("Value must be between {0} and {1}.", minVal, maxVal));
dgv[e.ColumnIndex, e.RowIndex].Value = previousValue;
在调用MessageBox期间我得到了null引用异常。
因此,在调用MessageBox(交换行)之前必须修复单元格值,它就像魅力一样。