C# Winform Err:检测到 FatalExecutionEngineError Message: 运行时遇到了错误。此错误的地址为 0x6b4b0784,在线程 0x2be8 上。错误代码为 0xc0000005。此错误可能是 CLR 中的 bug,或者是用户代码的不安全部分或不可验证部分中的 bug。此 bug 的常见来源包括用户对 COM-interop 或 PInvoke 的封送处理错误,这些错误可能会损坏堆栈。
在写一个测试设备的上位机,数据已经得到,存储在scanR里面,数据长度长度有700
ScanResult scanR;
struct ScanResult
{
public double[] bias;
public double[] pwr;
public double[] impd;
public double[] vdd;
}
然后在Panel控件里面添加一个PictureBox控件用来绘制scanR里面数据的曲线
//接收一个 Panel控件,并在控件内画图,用来绘制参数曲线
public Panel PivDrewPicture
{
get
{
return PivPainter;
}
set
{
PivPainter = value;
PivPainter.MinimumSize = new Size(480, 320);
pictureBox1 = new PictureBox();
//pictureBox1.Dock = DockStyle.Fill;
pictureBox1.Size = new System.Drawing.Size(PivPainter.Width, PivPainter.Height - 24);
pictureBox1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(192)))), ((int)(((byte)(220)))), ((int)(((byte)(192)))));
pictureBox1.Paint += new PaintEventHandler(pictureBox1_Paint);
pictureBox1.MouseMove += new MouseEventHandler(pictureBox1_MouseMove);
timerDevice = new Timer();
timerDevice.Tick += new EventHandler(timer1_Tick);
lab_P=new Label ();
lab_Im = new Label();
lab_V=new Label ();
lab_Ibais = new Label();
lab_Ibais.Location=new Point(0, PivPainter.Height - 24);
lab_P.Location = new Point((int)(PivPainter.Width * 1) / 4, PivPainter.Height - 24);
lab_Im.Location = new Point((int)(PivPainter.Width * 2) / 4, PivPainter.Height - 24);
lab_V.Location = new Point((int)(PivPainter.Width * 3) / 4, PivPainter.Height - 24);
PivPainter.Controls.Clear();
PivPainter.Controls.Add(pictureBox1);
PivPainter.Controls.Add(lab_Ibais);
PivPainter.Controls.Add(lab_P);
PivPainter.Controls.Add(lab_Im);
PivPainter.Controls.Add(lab_V);
lab_Ibais.BringToFront();
lab_P.BringToFront();
lab_Im.BringToFront();
lab_V.BringToFront();
timerDevice.Enabled = true;
}
}
Label lab_P, lab_Im, lab_V,lab_Ibais;
最后结果是这样的,
下面这段代码是用来显示光标所在位置的各项参数的值,如上图下边沿的四个值,
运行程序后软件能正常运行,显示也正常.
//用来实时显示光标对应位置的各项参数
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
try
{
UInt32 a = Convert.ToUInt32((((e.X * 1.0) / (pictureBox1.Size.Width * 1.0)) * 700));//计算离光标最近的一个数据的索引;
if (a >= 0 && a < 700)
{
lab_Ibais.Text = scanR.bias[a].ToString("0.00");
lab_P.Text = scanR.pwr[a].ToString("0.00");
lab_Im.Text = scanR.impd[a].ToString("0.00");
lab_V.Text = scanR.vdd[a].ToString("0.00");
timeFlag = false;
}
else
{
}
}
catch(Exception ex)
{
}
}
界面是这样的
但是我来回移动光标一会儿后就出现了这个情况:
前辈们知道这是什么原因引起的吗?