作者don750421 (1+1≠2)
看板C_Sharp
标题[问题] 几个新手级的小问题请教各位...
时间Thu Nov 17 22:12:11 2011
我要写的程式有点偏向网路方面,所使用的是Winform介面
假设我是Host1 对方是Host2
问题一:
我必须按下我的Start button才会收到Host2的讯息
Host2会主动建立连线,而我Host1也需要一个ack才能达到双方完成建立通讯
但是,我会设一个button,而这个button是去询问Host目前的状况(ex.idle.busy..等等)
然而,我想在一开始Host2主动建立连线,而我回覆ack时,顺便询问Host2目前的状况
那麽我该如何写呢?
问题1:
关於这个问题我是使用Timer去触发这个内容
System.Timers.Timer timerex = new System.Timers.Timer(1000);
//当我回覆Host2的ack讯息後启动
timerex.Elapsed += new System.Timers.ElapsedEventHandler(Check_Click);
//Check_Click按键内的事件就是要询问Host目前的状况
timerex.AutoReset = false;//设置是执行一次(false)
timerex.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
这个Timer我是写在当我收到Host2的建立连线时,所要回给Host2的ack讯息内
因为我只想要在一开始连线时,就先询问目前的状况
但是我觉得自己写的这种方法不是很好??想请问是否有更好的方法??
我原本是用拉timer元件的方式使用timerex.Elapsed
可是这样就不能设定AutoReset,也就是达到我一开始就要问Host2的目的
private void timer1_Tick(object sender, EventArgs e){
询问Host目前状况如何?
}
使用timer1_Tick的方式,可是变成是Private
从要回给Host2的讯息中,我不能呼叫,这部分我就不会处理了ˊˋ
==================================================================
问题二:
由於Host2回覆的格式有很多种,可能有ASCII.UNSIGN...等等
假设对方回传的讯息是一笔一笔传的..
假设刚刚的询问对方目前的状况为何?
Host2回传的讯息会是
L[2] //L代表List,也就是代表传回的资料会包含两笔
<A[3] "pc8"> //A代表格式为Ascii
<A[4] "idel">
在解析传回的内容,我是一层一层的拆解
if Item格式为L{
}else if 格式为A{
"<A[" + lItemNum + "] " + (char)34 + ItemData + (char)34 + ">"
}
因为在收资料时,是一笔一笔处理,也就是先丢<A[3] "pc8">,再丢<A[4] "idel">
但是我必须要在画面显示对方目前的号码和状态,所以我用一个Label显示
Machine.Text=Item;
Status.Text=Item;
但是,我发现两笔显示的都会是idle,请问这有甚麽好办法解决呢?
我想到的是先用一个阵列存?可是又觉得怪怪的?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.47.31.55