记一个脱离开发环境就运行异常的问题

昨天又碰到一个在开发机器上可以正常运行,其他机器完蛋的叉骚问题,大概如下..
定义并实例化一个Process
Process pro = new System.Diagnostics.Process();
注册异步接收数据的事件

try
  pro.OutputDataReceived += new DataReceivedEventHandler(Func_Rece);
catch
  //无动作

事件执行函数:
其中axPlayer1为主面板主线程上执行的AP播放器控件

private void Func_Rece(object sender, DataReceivedEventArgs e)
{
  try{
   if (e.Data.Contains("strTEMP"))
   {
     int cc = Convert.ToInt32(e.Data.Substring(e.Data.LastIndexOf(' ')).Trim());
     if (cc >= 32)
     {
             if (axPlayer1.GetState() == 0)
             {
                 axPlayer1_SetPictureFun("服务超时", 2000);
             }
     }
   }
  }
  catch{//异常时执行的代码
  }
}

问题来了,这样有明显缺陷的代码,不仅仅编译通过,并且在开发机器上执行无压力,在安装有相同开发环境的机器上也可以正常工作,到其他机器上就玩完了,好在代码的增加量不大,排查起来简单..
因为是异步执行的函数,所以正确的做法应该是要用一个委托来执行涉及主窗体控件的操作,就像下面这个样子..

         Invoke(new MethodInvoker(() =>
         {
             if (axPlayer1.GetState() == 0)
             {
                 axPlayer1_SetPictureFun("服务超时", 2000);
             }
         }));

以前也碰到过几次类似的其他机器无法运行的问题,刚开始总是把问题归咎于系统兼容性什么的,甚至不了了之,终究代码的合理性代码的质量还是关键的问题..

点赞
  1. 服装搭配师说道:

    标准化代码,确实可以避免很多问题。

  2. 静静博客说道:

    这方面,我是外行。

  3. 夏日博客说道:

    代码运行出行,很多时候都是兼容性问题。 :lol:

发表评论

电子邮件地址不会被公开。 必填项已用*标注