none
Winform 與 SerialPort的問題 RRS feed

  • 問題

  • Dear All,

    目前正在學習如何在winform上讀取RS232的資料,目前有遇到幾個問題想請教一下:

    1. 目前程式裡有很多個表單(Forms),有辦法在這個程式執行時(不管在哪個Form下)登一直監聽COM port有無送資料呢?

    2. 目前程式第一次執行時,按照流程跑完可以正常讀取Com Port的值,不過第二次要再執行時(就是第一次跑完後回到主畫面,再進行第二次流程),就收不到資料了,這時會收到unauthorizedaccessexception的例外,這情況是要在第一次用完Com port後就關掉,第二次跑時再打開嗎?

    • 開發工具版本-Visual Studio 2010 C#
    • 開發環境-Windows Form 
    • 開發系統: Win7 32bit

    謝謝

    2013年5月24日 上午 06:32

解答

所有回覆

  • 您好

    1. 一個表單(執行緒),例如主畫面表單,負責去監聽,然後把監聽的資料拋給其他多個表單

    2. 如果你有做 SerialPort.Close 關閉連接埠連線,則必須要重新做 SerialPort.Open 開啟新的序列埠連線;請注意任何應用程式的最佳作法是在呼叫 Close 方法之後,要呼叫 Open 方法之前,先等待一段時間,因為連接埠不會立即關閉。


    歡迎參觀我的Blog【菜鳥自救會】

    2013年5月24日 上午 06:54
  • 比方說, 你的 Form1 開啟 Form2 後,  Form1 應該還在, 不會關掉吧 ?

    如果是這樣, 小歐講的方法就是了.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年5月24日 上午 08:12
    版主
  • TO Bill版主:

    目前做法是把暫時用不到的表單會先Hide起來,等進入收錢表單時,才會把顯示商品這些頁面一次關掉.

    另外剛測試在收完錢後,要轉到列印表單前,下SerialPort.Close(),程式會當掉..

    我有先判斷SerialPort.isOpen ,再下Close command.

    2013年5月24日 上午 08:24
  • 你總有個主表單是一直存在的吧 ?

    當掉有沒有錯誤訊息呢 ? 因為你這樣問, 我也不知道該怎麼答, 我寫過很多 Serial Port 的程式, 向來都一直開開關關, 但也沒見過當掉過.


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年5月24日 上午 08:38
    版主
  • 目前我的做法是把主頁面先Hide起來,就是一次只會留一個表單在畫面上,

    我先改把主選單留著不Hide,再來試試看.

    另外程式當掉是沒錯誤訊息的,在Debug Mode下是看是執行到SerialPort.Close()就沒了,

    後面的程式也不會執行,按程式任何地方都沒反應. 

    2013年5月24日 上午 09:32
  • 用 AccessPort 監聽你的 COMx 後,開啟你的程式,到當掉為止,裡面會有紀錄看看你對 COMx 做過啥。

    2013年5月25日 上午 08:06
  • 我剛用AccessPort 去看Com Port事件,

    發現我對另一個Com Port下Close是可以正常出現Port Closed的資料.

    285 上午 11:17:45.703 0.00001642 Ticket.vshost. IOCTL_SERIAL_SET_WAIT_MASK           COM5 SUCCESS Mask:
    286 上午 11:17:45.703 0.00285711 Ticket.vshost. IOCTL_SERIAL_CLR_DTR                 COM5 SUCCESS
    287 上午 11:17:45.706 0.00001684 Ticket.vshost. IOCTL_SERIAL_PURGE                   COM5 SUCCESS Purge: RXABORT RXCLEAR
    288 上午 11:17:45.706 0.00001560 Ticket.vshost. IOCTL_SERIAL_PURGE                   COM5 SUCCESS Purge: TXABORT TXCLEAR
    289 上午 11:17:45.706 0.08205698 Ticket.vshost. IRP_MJ_CLOSE                         COM5 SUCCESS Port Closed

    但是會當掉那個Port,我發現沒有出現Port Closed的資料 就一直接收不到資料了.

    290 上午 11:17:45.841 0.00003162 Ticket.vshost. IOCTL_SERIAL_SET_WAIT_MASK           COM4 SUCCESS Mask:
    291 上午 11:17:45.841 0.00251588 Ticket.vshost. IOCTL_SERIAL_CLR_DTR                 COM4 SUCCESS
    292 上午 11:17:45.843 0.00001191 Ticket.vshost. IOCTL_SERIAL_PURGE                   COM4 SUCCESS Purge: RXABORT RXCLEAR
    293 上午 11:17:45.843 0.00000780 Ticket.vshost. IOCTL_SERIAL_PURGE                   COM4 SUCCESS Purge: TXABORT TXCLEAR

    2013年5月27日 上午 03:23
  • 關於關Port時會當掉的問題,我在網路上找到解答囉...

    基本上跟Com Port無關,是UI Thead的問題.

    參考MSDN 討論串: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/cd2f052c-b245-4df7-a935-d0b1be943cf3 

    2013年5月27日 上午 06:51
  • 監聽Port的問題在修改流程後,也已OK了...

    謝謝大家的幫忙..

    2013年5月27日 上午 07:11
  • 關於關Port時會當掉的問題,我在網路上找到解答囉...

    基本上跟Com Port無關,是UI Thead的問題.

    參考MSDN 討論串: http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/cd2f052c-b245-4df7-a935-d0b1be943cf3 

    你的描述這麼模糊, 天知道會是 UI Thread 的問題.有空把以下文章讀一讀,

    張貼文章應注意事項及應提供資訊


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2013年5月30日 上午 08:19
    版主