dotnet3.5とComponentFactoryKryptonv4.4.0.0を使用してwinformsアプリケーションをサポートしています。最近、AppDomain.CurrentDomain.UnhandledExceptionハンドラーとApplication.ThreadExceptionハンドラーを実装して、クライアントで発生した例外を通知しましたが、多くのエラーが表示されました。ログに。これは現在私の頭を使っています:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Font.GetHeight(Graphics graphics)
at System.Drawing.Font.GetHeight()
at System.Drawing.Font.get_Height()
at System.Windows.Forms.Control.set_Font(Font value)
at System.Windows.Forms.DataGridViewComboBoxEditingControl.ApplyCellStyleToEditingControl(DataGridViewCellStyledataGridViewCellStyle)
at System.Windows.Forms.DataGridView.BeginEditInternal(Boolean selectAll)
at System.Windows.Forms.DataGridView.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
at System.Windows.Forms.Control.WmKeyChar(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.DataGridView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam,IntPtr lparam)
スタックトレースは完全にWindowsコードであることに注意してください。私のクラスの1つを通過する別のものがあります:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Font.GetHeight(Graphics graphics)
at System.Drawing.Font.GetHeight()
at System.Drawing.Font.get_Height()
at System.Windows.Forms.Control.set_Font(Font value)
at MyOrg.MyApp.WindowsClient.GuiControls.MaskedTextBoxEditingControl.ApplyCellStyleToEditingControl(DataGridViewCellStyledataGridViewCellStyle)
at System.Windows.Forms.DataGridView.BeginEditInternal(Boolean selectAll)
at System.Windows.Forms.DataGridView.ProcessKeyEventArgs(Message& m)
at System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
at System.Windows.Forms.Control.WmKeyChar(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.DataGridView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
そのスニペットのコードは次のとおりです。
public void ApplyCellStyleToEditingControl(DataGridViewCellStyle dataGridViewCellStyle)
{
this.Font = dataGridViewCellStyle.Font;
this.ForeColor = dataGridViewCellStyle.ForeColor;
this.BackColor = dataGridViewCellStyle.BackColor;
this.TextAlign = translateAlignment(dataGridViewCellStyle.Alignment);
}
あまり教えてくれません。
「System.ArgumentException:パラメータが無効です。」エラーはかなりひどく、先に進むことはほとんどありませんが、dotPeekを使用して、Font.Get_Height(Graphics g)のコードを調べ、それがGDI +エラー、具体的にはGetFontHeightであることを発見しました。
public float GetHeight(Graphics graphics)
{
if (graphics == null)
{
throw new ArgumentNullException("graphics");
}
else
{
float size;
int fontHeight = SafeNativeMethods.Gdip.GdipGetFontHeight(new HandleRef((object) this, this.NativeFont), new HandleRef((object) graphics, graphics.NativeGraphics), out size);
if (fontHeight != 0)
throw SafeNativeMethods.Gdip.StatusException(fontHeight);
else
return size;
}
}
これはこのGDI+メソッドです:http: //www.jose.it-berater.org/gdiplus/reference/flatapi/font/gdipgetfontheight.htm
http://msdn.microsoft.com/en-us/library/windows/desktop/ms534175(v=vs.85).aspxに記載されているように、ステータスエラーはInvalidparameterです 。
残念ながら、これはGraphicsオブジェクトの問題を解決するのに役立ちません。これは、フィールドのユーザーからの未処理の例外が原因です。最近、EventHandlerのリークと、使用可能なすべてのGDIハンドルの消費が原因でメモリリークが発生しましたが、これを修正したので、これがメモリリークなのか、GDIハンドルリークなのか、それとも単に悪いのかわかりません。ユーザーが通常とは異なることを行うことによってトリガーされる場所を構成します。
誰かアイデアはありますか?よろしくお願いします!