簡體   English   中英

在MVC桌面應用程序中使用線程

[英]Using threads in an MVC desktop application

我正在使用MVC開發C#桌面應用程序(Windows窗體),並且希望使用線程,因為我認為它將為最終用戶提供更流暢的視圖交互,我將盡我所能解釋。

我這樣實現了MVC:

  • View->有幾個觸發事件的控件,這些事件由控制器訂閱

  • 控制器->從這些事件中接收一些信息,並通過調用適當的方法將其傳遞給模型,例如Program.model.methodX(data)

  • 模型->處理信息,並通過觸發視圖訂閱的事件將數據發送到視圖,以便它可以更新自身

該模型實際執行的操作是與PLC進行通信,以從某些寄存器中獲取一些數據,而在執行此操作時,視圖將凍結以等待答復。.我嘗試在模型中實現線程,因為我認為它是執行此操作的適當位置,問題是我需要為線程傳遞一些信息(寄存器數等),這是一個問題,因為線程需要一個返回void並且沒有參數的方法(ThreadStart),最后將數據發送到通過觸發一個事件來查看問題,因為如果它是非靜態方法,字段或屬性等,因為它需要對象引用。是否有任何方法可以實現此目的,或者我認為這是錯誤的嗎?

謝謝大家。

我覺得您那里有幾個問題,但我會嘗試解決:

  1. 您可以將參數傳遞給線程,但是需要使用ParameterizedThreadStart來允許傳遞對象。

  2. 關於傳遞數據和取回數據,您應該考慮使用TaskFactory ,尤其是StartNew方法,它將創建一個新Task 您可以傳遞lambda,具有參數的方法以及將返回結果的函數,然后可以使用任務對象等待並檢索結果。 有關線程的更多信息,包括對使用TaskFactory一些了解, TaskFactory查看Joseph Albahari的有關線程的鏈接。 這是一種極好的資源。

在一般意義上說,有許多技術可用於將數據進出線程。 您可以傳入this參數,然后可以訪問其所有成員,只需記住您正在處理多個線程,因此在讀取/寫入數據時要格外小心。 如果存在共享數據,則需要通過某種形式的鎖定來保護它。 如果您不必在線程運行時共享數據,我可能會創建一個類來保存需要將其傳遞給線程的數據,並對結果進行相同的處理。 然后,您可以只使用TaskFactory.StartNew來啟動任務並傳遞數據,並使用任務的結果取回數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM