日期:2014-05-18  浏览次数:21126 次

C# 不同窗口的调用问题
我有这样一个问题,其问题在于设计的思想,我不会:

我想实现这么一个功能:
  有3个窗口:窗口1(主窗口,含有SerialPort串口)、窗口2(由主窗口1呼出)、窗口3(由子窗口2呼出)
  然后,窗口1中有一个Timer_Tick在一直调用SerialPort进行通信;
  我想要的结果是:
  当我利用主窗口1中的按钮呼出子窗口2,然后再利用子窗口2中的按钮呼出子窗口3时,此时窗口3要利用串口收发一些数据,这些数据可能比较大量,也比较重要;故要求此时窗口1中的SerialPort串口要给窗口3独占使用,在窗口3使用完之后,再放给主窗口1中的Timer_Tick给其他人使用。

我的问题是:怎么实现上面的功能呢?????

我尝试了如下办法:
  1)在子窗口3中定义一个for循环,让程序在窗口3中的for循环干完之后,才跳回到主循环;
  发现不行:原因是如果这样就必须调用窗口1中的SerialPort串口,就必须在窗口3中定义Form1 form1=new Form1(); 这样直接导致程序无法启动,因为主窗口1一直在被定义new Form1();

  2)把主窗口1中的SerialPort定义为静态串口:static SerialPort,这样就可以不用Form1 form1=new Form1()也可以让子窗口3使用主窗口1中的SerialPort了;
  发现不行:SerialPort定义了static后,子窗口3无法访问form1.Serialport,提示为“无法使用实例引用来访问成员”

  3)把主窗口1中的Timer_Tick停止掉,来执行子窗口3中的串口通讯程序(当然这时要将这些程序放到主窗口1下)
  发现不行:当把主窗口1中的Timer_Tick停止掉后,程序单步调试走到子窗口2显示完毕(此时子窗口3因由窗口2呼出故也显示完毕了)后,程序便永远停止了,回不到主窗口1中Timer_Tick停止的地方。


我想了很久,到底怎么样的一种思想可以实现我上面说的功能呢?????

诚恳请高手指教!!!!


------解决方案--------------------
SerialPort只能打开一串口,你需要让其他窗体用时,先关闭当前使用的,否则会出错
------解决方案--------------------
1.将SerialPort传递给窗口3中的属性
2.静态变量SerialPort
------解决方案--------------------
留下你QQ。晕