C# 重置listview字体会导致随机崩溃

C# 重置listview字体会导致随机崩溃,c#,listview,C#,Listview,参考自: 我使用以下代码重置字体: ListView1.Font.Dispose(); ListView1.Font = new Font("Microsoft Sans Serif", 15F, FontStyle.Regular); 尽管出于某种原因,它随机地给出了这个错误(所以并非总是如此) 我的程序执行以下操作:, 将LisView克隆到其他ListView等,因此我需要重置字体。因为如果我不这样做,它将强制ListViewItems上的所有字体,尽管在大约2%的尝试中,它会因上述错

参考自:

我使用以下代码重置字体:

ListView1.Font.Dispose();
ListView1.Font = new Font("Microsoft Sans Serif", 15F, FontStyle.Regular);
尽管出于某种原因,它随机地给出了这个错误(所以并非总是如此)

我的程序执行以下操作:,
将LisView克隆到其他ListView等,因此我需要重置字体。因为如果我不这样做,它将强制ListViewItems上的所有字体,尽管在大约2%的尝试中,它会因上述错误而崩溃。非常令人困惑。

不要
Dispose
ListView1.Font
:是
ListView1
拥有
Font
,所以需要时让它
Dispose
处理它。注意
DisposeFontHandle()
集合中
我必须处理字体,因为它在调整大小时将重置ListViewItems中的静态字体集合。当我克隆listviewitems时,它有一个硬编码字体,我需要处理该字体以使其重新链接(当ListView1.font更改listviewitems更改时,仅当我在克隆后处理字体时才会发生这种情况).我基本上希望在不硬编码当前字体的情况下克隆listviewitems,因为我希望通过设置ListView1.font来更改所有字体调用堆栈与代码段完全无关。“无效参数”的常见原因是资源泄漏,激活的图形对象太多。使用任务管理器、流程选项卡并为“GDI对象”和“用户对象”添加列。其中有几百个以上是个问题。只有在使用该代码时才会发生错误。我测试了很多次。
System.ArgumentException: Invalid parameter.
   at System.Drawing.Font.ToLogFont(Object logFont, Graphics graphics)
   at System.Drawing.Font.ToLogFont(Object logFont)
   at System.Drawing.Font.ToHfont()
   at System.Windows.Forms.Control.FontHandleWrapper..ctor(Font font)
   at System.Windows.Forms.Control.get_FontHandle()
   at System.Windows.Forms.Control.SetWindowFont()
   at System.Windows.Forms.Control.OnHandleCreated(EventArgs e)
   at System.Windows.Forms.ListView.OnHandleCreated(EventArgs e)
   at System.Windows.Forms.Control.WmCreate(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ListView.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)