读书人

C#编程wince上在同一个工程上多个

发布时间: 2012-09-07 10:38:15 作者: rapoo

C#编程wince下,在同一个工程下,多个窗口如何实现串口通信?
现在遇到一个问题,在同一个工程下,有多个窗口,如form1,form2,form3,form4,我怎样才能够使得这多个窗口能够同时的得到串口数据,不停的更新界面呢?
我采用的方法是:
我是在form1里,实现了serialport类,用TextBox1来接受数据,TextBox1属性设定为public,在form2中也有个textbox 来接受form1中TextBox1传来的数据。form2 是通过form1中的button来触发打开的。我现在可以实现的是,当串口数据传来时,form1 中能够及时的更新数据,可是form2中的数据,必须要再次点击button打开form2才可以更新数据。不知道怎么解决这个问题。

还有一个问题,如果采用这种办法来解决多窗口串口问题的话,我在form2中,点击一个button2按钮怎样才能发送数据到串口呢?

大家帮帮忙看看呢,集思广益下,如果不采用这种方法,该如何去做呢?能够给个简单的例子和代码!

[解决办法]
可以加 全局变量 和 全局方法事件,比如在Program类中处理,然后在方法事件中处理串口读写,同时更新form1 form2 form3 form4.
也可以在form1中更新form2 form3 form4,预先传递这3个窗口的引用给form1就行.
[解决办法]
我这里没有wince,也没有串口设备,但form1,form2 form3 form4倒是有的,可以模拟Serialport类的操作

C# code
首先是一个SerialportEx单例类,里面模拟了发送,接收,触发事件等等功能namespace WindowsFormsApplication1{    /// <summary>    ///  数据到达的委托    /// </summary>    /// <param name="text"></param>    public delegate void DataArrivalHandler(String text);    /// <summary>    /// 一个模拟Serialport的单例类    /// </summary>    public class SerialportEx    {        /// <summary>        /// 数据到达的事件        /// </summary>        public event DataArrivalHandler OnDataArrival;        /// <summary>        /// 单例,密封        /// </summary>        private SerialportEx()        {        }        /// <summary>        /// 单例对象        /// </summary>        public static readonly SerialportEx Instance = new SerialportEx();        /// <summary>        /// 模拟数据到达        /// </summary>        /// <param name="text"></param>        private void DataArrival(String text)        {            if (OnDataArrival != null)            {                // 触发事件,通知上层                OnDataArrival(text);            }        }        /// <summary>        /// 模拟接收数据        /// </summary>        public void StartReceive()        {            ThreadPool.QueueUserWorkItem(new WaitCallback(Send), null);        }        /// <summary>        /// 模拟模拟,全都是模拟        /// </summary>        /// <param name="obj"></param>        private void Send(Object obj)        {            while (true)            {                DataArrival(System.DateTime.Now.ToString());                System.Threading.Thread.Sleep(1000);            }        }    }}
[解决办法]
使用事件和委托

读书人网 >C#

热点推荐