[問題] 幾個新手級的小問題請教各位...
我要寫的程式有點偏向網路方面,所使用的是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
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章