【问题标题】:In GDI+ a "Parameter is not valid." on setting pen.Width在 GDI+ 中,“参数无效”。关于设置 pen.Width
【发布时间】:2010-02-17 18:34:17
【问题描述】:

我有一个System.Drawing.Pen _pen

当在某些迭代中设置 _pen.Width = 3 它给了我:

System.ArgumentException 
  Message="Parameter is not valid."
  Source="System.Drawing"  - System.Drawing.dll
  StackTrace:
       at System.Drawing.Pen.set_Width(Single value)
       at MyProject.ctlPanneauGraphique.CustomLine.set_BorderWidth(Int32 value) in 
       ....
       at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
       at MySolution.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()

什么以及为什么?

【问题讨论】:

    标签: .net gdi+ argumentexception


    【解决方案1】:

    您是否正在处理 _pen 变量?

    如果不是,这可能表明您怀疑存在资源泄漏问题。

    如果是,这可能表明您正在访问已处置的实例。 GDI 对象在释放后使用时通常会抛出 ArgumentException。

    【讨论】:

    • 是的,我处理了 Pen 变量。也许你有理由。
    【解决方案2】:

    你是如何初始化 _pen 变量的?根据MSDN documentation,如果你使用 Pens 类来初始化你的变量,你会得到一个不可变的 Pen,它的 Width 参数不能设置。尝试这样做会导致引发 ArgumentException,这正是您所看到的。

    【讨论】:

    • 如前所述,pen.Width 设置在某些迭代中失败。我的意思是不是第一次。我创建了这样的笔 _pen = new Pen(Color.Black) 和 Pens.Black.Clone() - 结果相同。
    【解决方案3】:

    我开始认为这是由于内存泄漏问题造成的。显然操作系统不能创建超过 10.000 个 GDI+ 对象......

    执行一些分析后,我检测到应用程序中存在巨大的内存泄漏,因此错误来自那里。

    【讨论】:

    • @Agnel,请参阅我的 kbrinley 评论。
    猜你喜欢
    • 1970-01-01
    • 2014-07-14
    • 2019-05-26
    • 1970-01-01
    • 2012-08-01
    • 2016-08-15
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    相关资源
    最近更新 更多