当前位置:编程学习 > C#/ASP.NET >>

C#程序突然自动关闭

C#的一个小程序,在开发环境中测试不会突然关闭,但是一旦以.EXE运行就会突然关闭,不是隐藏起来而是完全关闭了,搞不懂为什么会这样,咋处理,如何去排除错误,请高手指点,谢谢。 
以下是这个的代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using _DataBase;

namespace ReadUid
{
    public partial class Form1 : Form
    {
        delegate void HandleInterfaceDataReceived(string readData); 
        HandleInterfaceDataReceived dataReceived;

        private Thread _GetDataThread;

        byte[] serial = new byte[4];
        byte status = 0x01;

        string UID = "", oldUID = "";

        _DataCtrl DC;

        public Form1()
        {
            InitializeComponent();

            dataReceived = new HandleInterfaceDataReceived(dispData);
        }

        
        public string dis_package(byte[] reb)
        {
            string temp = "";

            foreach (byte b in reb)
            {
                temp += b.ToString("X2");
          }

            return Convert.ToUInt32(temp, 16).ToString();
        }

        private string getFullPath()
        {
            return System.Reflection.Assembly.GetCallingAssembly().GetName().CodeBase
        }

        private string getAppDir()
        {
            string fullPath = getFullPath();
            return System.IO.Path.GetDirectoryName(fullPath);
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            DC = new _DataCtrl("ole", "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + getAppDir().Replace("file:\\", "") + "\\db.accdb;");

            DC.checkConn();

            if (_GetDataThread == null)
            {
                _GetDataThread = new Thread(new ThreadStart(ReadUid));
            }
            _GetDataThread.Start();

            richTextBox1.AppendText("初始化程序成功!\r"); 
        }

        private void ReadUid()
        {
            while (true)
            {
                status = ReaderLib.piccrequest(serial);
                if (status == 0)

                {
                    UID = dis_package(serial);
                    if (UID != oldUID)
                    {                        
                        oldUID = UID;
                        Invoke(dataReceived, UID
                    }
                }
                else
                {
                    oldUID = "";
                }

                Thread.Sleep(200);
              
            }
        } --------------------编程问答-------------------- 编译运行一下肯定是 报错了 但是,net没有弹出错误提示 --------------------编程问答-------------------- 逐步移除代码,进行测试。。。。。。。。。。。 --------------------编程问答-------------------- 其实就是程序抛出了未捕获的错误,注册AppDomain.CurrentDomain.UnhandledException事件可以看到抛出了什么异常 --------------------编程问答-------------------- 小手一抖 --------------------编程问答-------------------- 最有可能就是ReadUid方法里抛出了异常,因为在窗口线程里抛出的异常不会导致程序退出,只有自己建的线程才会。 --------------------编程问答-------------------- 数据库连接正常? --------------------编程问答-------------------- 调试一下,原来报错的地方,会出现中断,就看出来问题了 --------------------编程问答-------------------- 程序出现致命错误~逐步调试 --------------------编程问答-------------------- 调试是没有报错的,数据库连接正常的 --------------------编程问答-------------------- http://blog.csdn.net/lazyleland/article/details/6524041 --------------------编程问答-------------------- 有异常没有捕获 --------------------编程问答-------------------- 谢谢各位的提示,观察了两周都没有再现,可能是环境的问题,刚好那时用了360的注册表瘦身之后就出现这个问题了,注册表还原后就没出现了 --------------------编程问答-------------------- 楼主解决了,应该结贴了吧
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,