none
请教高手们,我写了一个窗口应用程序,开了一个线程(死循环),如何才能在它执行的时候能够干别的事?(程序无法执行别的操作) RRS feed

  • 问题

  • Code Snippet


    程序是在pda上面跑的,运行后点击进行其他操作,会报操作已超时“的错误,问下各位老师有没有什么方法可以解决?
    namespace mobileRF
    {
        public partial class GetData : Form
        {
            public SerialPort port_RF = null;//用于读卡的串口
            private static  string CardOutput = ""; //串口读取输出字符串
            
            public GetData()
            {
                InitializeComponent();
            }

            private void GetData_Load(object sender, EventArgs e)
            {
            }

            //跨线程操作使用代理
            private delegate void DReadCardShow();
            //读卡操作
            private void ReadCardShow(object o)
            {
                DReadCardShow dr;//委托
                dr = delegate()
                {
                    char[] CharBuff;
                    System.Object lockThis = new System.Object();
                    lock (lockThis)
                    {
                        while (port_RF.IsOpen)
                        {//串口打开的情况下读取串口
                            try
                            {
                                byte[] recvBuff = new byte[1024];
                                int count = 0;
                                if (port_RF.IsOpen)
                                {
                                    count = port_RF.Read(recvBuff, 0, 128);
                                    CharBuff = Encoding.UTF8.GetChars(recvBuff, 0, count);//字符转换并进行存储
                                    //字符转换
                                    foreach (char c in CharBuff)
                                    {
                                        if ('S' == c)
                                        {
                                            CardOutput = "S";
                                        }
                                        else if ('E' == c)
                                        {
                                            CardOutput = CardOutput + "E";
                                            CardShow.Text = CardOutput;
                                        }
                                        else
                                        {
                                            CardOutput = CardOutput + Convert.ToString(c);
                                        }
                                    }
                                }
                                Thread.Sleep(8000);
                            }
                            catch (Exception err)
                            {
                                MessageBox.Show(err.Message);
                            }
                        }
                    }
                };
                CardShow.Invoke(dr);
            }

            static void showshow(object o)
            {
                int a = 1;
                while (1==a)
                {
                    a++;
                    a--;
                }
            }

            private void Connect_Click(object sender, EventArgs e)
            {
                if ("读卡" == Connect.Text)
                {
                    Connect.Text = "取消";
                    //通讯格式设置
                    port_RF = new SerialPort("COM3:");
                    port_RF.BaudRate = 9600;
                    port_RF.DataBits = 8;
                    port_RF.Parity = 0;
                    port_RF.ReadTimeout = 4000;
                    //打开串口
                    try
                    {
                        if (port_RF != null)
                            port_RF.Open();
                    }
                    catch (Exception err)
                    {
                        while (true) {};
                    }
                    //读取卡中信息
    ////////////////////////////////////////////////////以下为修改部分
                    ThreadStart myThreadDelegate = new ThreadStart(ReadCardShow);
                    Thread myThread = new Thread(myThreadDelegate);
                    myThread.Start();
    /////////////////////////////////////////////////////////////////////////////////////////

                }
                else if ("取消" == Connect.Text)
                {
                    if (port_RF != null)
                    {
                        if (port_RF.IsOpen)
                            port_RF.Close();
                    }
                    Connect.Text = "读卡";
                }
            }
    }


    2008年10月8日 2:44