我在這裏遇到了一個小問題: 我使用的是串行端口通信 - 我所有的通信功能。被包裝到我自己的serialport類中。該類的實例 都應該僅在在while循環中使用模式
using(Serport port = new Serport(...)){}
可以用來保證,即處置()被操作之後被調用。
現在這是一次性調用沒有問題,但我想不出一種方式: 我有一個函數,應該通過while循環來調用,通過comport永久刷新,直到用戶中斷(該函數被設計爲在每次被調用時重置計時器本身,當不再被調用時超時)。 現在這個操作對時間非常重要,每次調用時都不能打開和關閉串口。所以使用該函數內部的使用模式將無法工作(或將它?) 要想實現這一點,我能想到的唯一方法是將using(){}放在while循環周圍 - 我想爲了避免這一點,雖然它會混淆我的代碼,這是清楚地建立在一種方式,該comport訪問處理低級別,並真正的應用程序只有簡單的功能,所有的工作都可用...
你大家看到其他選擇嗎?有沒有辦法用手來終止使用模式?只需在我的超時定時器中手動調用Dispose()將不起作用,因爲如果我得到異常,它將不會被調用 - 並且我必須確保Dispose()被調用,以便serialport保持可管理狀態。
感謝您的幫助!
一個代碼示例將有助於... – cdhowie 2010-12-07 07:30:01
如果您的問題是反覆創建和處置串行端口連接(這就是爲什麼您不想使用該函數中的`using`語句),爲什麼會手動調用`Dispose`會更好嗎? – 2010-12-07 07:33:41
因爲我可以手動從超時定時器的.Elapsed-Event中調用Dispose(),只有當函數不再被調用時纔會到達。但是如果我用手調用,我沒有using(){}指令的保證,即使我得到異常(例如ReadTimeout或類似的東西),也會調用Dispose()。 – Lorenz 2010-12-07 07:54:38