昨天又碰到一个在开发机器上可以正常运行,其他机器完蛋的叉骚问题,大概如下..
定义并实例化一个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); } }));
以前也碰到过几次类似的其他机器无法运行的问题,刚开始总是把问题归咎于系统兼容性什么的,甚至不了了之,终究代码的合理性代码的质量还是关键的问题..
标准化代码,确实可以避免很多问题。
这方面,我是外行。
代码运行出行,很多时候都是兼容性问题。 :lol: