当前位置: 代码迷 >> C# >> C# Winfrom项目,运行程序一段时间后系统自动关闭结束了,请教怎么解决此有关问题
  详细解决方案

C# Winfrom项目,运行程序一段时间后系统自动关闭结束了,请教怎么解决此有关问题

热度:73   发布时间:2016-05-05 04:18:10.0
C# Winfrom项目,运行程序一段时间后系统自动关闭结束了,请问如何解决此问题。
在C# Winfrom项目,有一个form窗体,六个Panel控件(用于放置显示监控视频图像的用户自定义控件),
还有一个timer计时器控件(设置每隔5分钟调用六个监控视频图像轮流放到对应的Panel控件)

目前遇到的问题是,监控点的视频图像有的由于网络好点显示加载视频图像快点,有的由于网络不是太好加载显示视频图像慢点。
在form窗体运行一段时间后(大概运行2个小时至3个小时之间),导致这个form窗体自动结束了,自动关闭这个APP这个进程。

发现在这个时间段内,电脑内存的使用率为30%至40%之间。
附运行这个APP应用程序的电脑配置为:操作系统: WINDOWS 7 旗舰版, 处理器:Intel(R) i3-413OT CPU @ 2.9GHz 2.89GHz,内存:4G


请问将运行这个程序电脑的硬件配置高点,这样可以解决此问题吗?
还是有其它的办法解决此问题?最好能提供相关的参考资料。谢谢!


附代码:
 private void FrmMonitor_Load(object sender, EventArgs e)
{
  timer = new System.Threading.Timer(MyTimerCallback, null, 0, 300000); //每隔5分钟
}

void MyTimerCallback(object o)
        {
            try
            {
                  //防止在窗口句柄初始化之前就走到下面的代码
                    if (this.IsHandleCreated == true)
                    {
                        TheadPackage();
                    }
                
            }
            catch (Exception ex)
            {
                Log.Log(string.Format("MyTimerCallback:{0}\terrmsg:{1}", this.ToString(), ex.Message));
            }
        }


        void TheadPackage()
        {
            System.Threading.Thread thread = new System.Threading.Thread(
                   new System.Threading.ThreadStart(doWork));
            thread.Start();
        }



  void doWork()
        {
            try { 

                System.Threading.Thread.Sleep(500);


                dtList1 = sqlHelper.GetNumsVedioList(index* 6);

                if (dtList1.Rows.Count == 0)
                {
                    index = 0;
                    dtList1 = sqlHelper.GetNumsVedioList(index * 6);
                }

                monitor_listVideoChannel = mod.MonitorUrl1(dtList1);
                index++;
              

                string[] MonitorArrayUrl = new string[6];
                for (int k = 0; k < monitor_listVideoChannel.Count; k++)
                {
                   string str1 = "";

                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).ip.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).port.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).username.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).pass.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).tpid.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).vcno.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).vcname.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).vcid.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).server.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISVOICE.ToString() + ",";
                   str1 += "" + ((CVideoChannel)(monitor_listVideoChannel[k])).STREAM.ToString() + ";";
                   str1 += "ISPICTURE&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISPICTURE.ToString() + ",";
                   str1 += "ISPTZ&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISPTZ.ToString() + ",";
                   str1 += "ISAUDIO&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISAUDIO.ToString() + ",";
                   str1 += "ISRECORD&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISRECORD.ToString() + ",";
                   str1 += "ISPLAYBACK&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISPLAYBACK.ToString() + ",";
                   str1 += "ISDOWNLOAD&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISDOWNLOAD.ToString() + ",";
                   str1 += "ISALARM&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISALARM.ToString() + ",";
                   str1 += "ISTVWALL&" + ((CVideoChannel)(monitor_listVideoChannel[k])).ISTVWALL.ToString() + ";";
                   str1 += ((CVideoChannel)(monitor_listVideoChannel[k])).veinfo.ToString() + ";";

                   MonitorArrayUrl[k] = str1;

                  }

                  //防止在窗口句柄初始化之前就走到下面的代码
                  if (this.IsHandleCreated == true && Module1.frmvalue == "montor")
                  {
                      MyInvoke mi = new MyInvoke(SetMonitor);
                      BeginInvoke(mi, new object[] { MonitorArrayUrl });
                  }

                  System.Threading.Thread.Sleep(500);

                
            
            }
            catch (Exception ex) 
            {
                Log.Log(string.Format("doWork:{0}\terrmsg:{1}", this.ToString(), ex.Message));
            }
        }

public void SetMonitor(string[] strarray)
        {
            try
            {

                for (int m = 0; m < strarray.Length; m++)
                {

                    if (strarray[m] != null)
                    {
                        string strvalue = strarray[m].ToString();
                        string[] monitorarray = strvalue.Split(';')[0].Split(',');

                        if (m == 0)
                        {

                            PlayMon(monitorarray[7].ToString(), 640, 360, panel1, monitorarray);
                        }
                        else if (m == 1)
                        {

                            PlayMon(monitorarray[7].ToString(), 640, 360, panel2, monitorarray);
                        }
                        else if (m == 2)
                        {
               

                            PlayMon(monitorarray[7].ToString(), 640, 360, panel3, monitorarray);
                        }
                        else if (m == 3)
                        {
                          

                            PlayMon(monitorarray[7].ToString(), 640, 360, panel4, monitorarray);
                        }
                        else if (m == 4)
                        {
                         

                            PlayMon(monitorarray[7].ToString(), 640, 360, panel5, monitorarray);
                        }
                        else if (m == 5)
                        {
                     

                            PlayMon(monitorarray[7].ToString(), 640, 360, panel6, monitorarray);
                        }
                    }

                }
            }
            catch (Exception ex) 
            {
                Log.Log(string.Format("SetMonitor:{0}\terrmsg:{1}", this.ToString(), ex.Message));
            }
        }


void PlayMon(string name, int width, int height, Panel pl, string[] monitorarray)   //创建播放监控视频的组件
        {
            
            foreach(Control ctl in pl.Controls)
         {
              PlayerMon.PlayerMon  pl= ctl as  PlayerMon.PlayerMon ;
              pl.ctlDispose(); //关闭视频
         }
            pl.Controls.Clear();
            PlayerMon.PlayerMon ocm = new PlayerMon.PlayerMon();
            ocm.Name = name.ToString();
            ocm.Width = width;
            ocm.Height = height;
            ocm.Top = (pl.Height - ocx.Height) / 2;
            ocm.Left = ((pl.Width - ocx.Width) / 2)-1;

            ocm.Play(monitorarray[0], monitorarray[1], monitorarray[2], monitorarray[3], monitorarray[5], monitorarray[6], monitorarray[4], monitorarray[7], "rtsp", monitorarray[10], monitorarray[11], monitorarray[0], monitorarray[1], "HIK-DS8000HC", monitorarray[5], monitorarray[5], monitorarray[2], monitorarray[3], "av_stream", monitorarray[8], monitorarray[12], monitorarray[14]);
            pl.Controls.Add(ocx);

        } 
------解决思路----------------------


这不发过了么。还没搞定?
------解决思路----------------------
  代码没问题,别的地方有问题
------解决思路----------------------
你的Log没记录点东西下来么?
  相关解决方案