是小明同学呀 2020-06-03 17:17 采纳率: 100%
浏览 207
已采纳

C# Winform MouseMoves事件刷新数据显示,出现0xc0000005

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)
            {

            }
        }

界面是这样的图片说明

但是我来回移动光标一会儿后就出现了这个情况:图片说明

前辈们知道这是什么原因引起的吗?

  • 写回答

1条回答 默认 最新

  • Zelgius 2020-06-04 13:31
    关注

    你可以先验证一下这个错误具体出在社么地方。比如你把这些赋值从取scanR的内容变成e.X之类的。
    根据这个报错内容,你取的这个scanR的内容有可能是调用了Win32API来获取的。而MouseMove这个事件是频繁被触发的。如果是这样那么有可能是因为太过频繁的取值导致的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已采纳回答 2月8日

悬赏问题

  • ¥15 地图软件开发技术答疑(api, 地点获取,外观样式)
  • ¥20 物理远程控制麦克风使用问题
  • ¥15 打印预览会泄漏纸钱包密码吗
  • ¥15 在hololens1上运行unity项目只有空窗口
  • ¥25 TABLEAU PREP无法打开
  • ¥15 百度帐号问题/centos
  • ¥15 关于#c语言#的问题:求完整代码条件好说
  • ¥100 HALCON DELPHI
  • ¥15 (需要远程,AI不回)VB6二进制文件转换成功,但是C#转换总是失败
  • ¥15 关于#matlab#的问题:有没有什么其他办法能够保证不退出进程(相关搜索:matlab调用)