我遇到了自定义书写绘图仪类的问题。 此类用于绘制给定PictureBox的图像。
基本用法是这样的:
double[] signal = StaticSignalGenerator.Sinus(10.0, 0.0, 1000, 5);
using (Plot plotter = new Plot(pictureBox1, Color.White))
{
plotter.Draw(signal, Pens.Black);
}
构造函数使用pictureBox1作为参考,并为图像制作白色背景颜色。绘图是长度和幅度的复杂变换,它使用图形在使用块中绘制,而参考pictureBox图像将自动更新。
我认为某处存在问题,因为在PictureBox图像可以刷新之前处理了类?
this.pictureBoxRef.Image = this.drawBitmap;
使用位图的克隆会更好吗? (如果那个会保持在相同的范围内,那我恐怕不会帮助)
如果我使用此类与使用块,到达时 处置阶段我得到了ArgumentException。 该类使用以下行实现IDisposable:
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (this.pictureBoxRef != null)
{
this.pictureBoxRef.MouseMove -= new MouseEventHandler(PictureBoxRef_MouseMove);
}
if (this.drawBitmap != null)
{
this.drawBitmap.Dispose();
}
if (this.initializedBitmap != null)
{
this.initializedBitmap.Dispose();
}
}
}
参数无效:null,未处理ArgumentException。 StackTrace如下:
System.Drawing.Image.get_Width()System.Drawing.Image.get_Size() System.Windows.Forms.PictureBox.ImageRectangleFromSizeMode(PictureBoxSizeMode 模式)System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe) System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16层)System.Windows.Forms.Control.WmPaint(Message& m) System.Windows.Forms.Control.WndProc(Message& m) System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m) System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m) System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg,IntPtr wparam,IntPtr lparam)
知道如何解决这个问题吗? 提前致谢!
答案 0 :(得分:0)
很难说,因为你给了我们很少的信息,但看起来它仍然试图绘制一个PictureBox
。目前尚不清楚这些是否与您正在处理的值有任何关系,但如果PictureBox
包含您正在处置的Bitmap
值之一,那么这很容易成为问题。您可能希望先从表单中删除PictureBox
,或者将其Image
属性设置为null
。
(如果您可以创建一个简短的完整的程序来演示问题,那么可以让您更轻松地帮助您...)