2009-12-16 90 views
2

我公司生產的產品通過USB連接到PC。我正在爲此產品編寫一個使用Visual C#的DLL驅動程序,以便任何想要編寫可以控制的程序或設備的人都可以這樣做。一些驅動程序將執行的操作需要幾秒鐘才能完成(例如,在設備中移動電機10000步)。我正在考慮這個驅動程序的兩種不同的方法,我不確定哪個是理想的。設備驅動程序DLL阻塞與非阻塞?

第一種方法:使命令非阻塞。基本上客戶端應用程序會調用我的DLL中的一個方法來啓動電機轉向,並且該方法會立即返回。然後我會有一個Event,移動完成時觸發的MoveFinished。這種方法將允許客戶端應用程序在不使用多線程的情況下在電機移動時不凍結並執行其他操作。

第二種方法:使命令阻塞。因此,當客戶端應用程序調用Move方法時,該方法會阻止並在移動完成之前不會返回。這會導致客戶端應用程序在發生移動時凍結(除非他們使用多線程),但也可能有用,因爲它不會讓客戶端應用程序發生愚蠢的錯誤,例如在設備上調用移動方法已經在移動...

有沒有人有任何經驗,智慧,意見或想法分享?

回答

2

我會這樣做。由於您正在將API寫入您的設備,因此我會讓最終用戶靈活地決定他們希望如何操作該方法。同步或異步。

如果您只能選擇一條路線,我會傾向於異步。原因是大多數用戶在設備開發過程中很可能不喜歡應用程序在設備完成過程時凍結。

你說的事件結構是好的。