2011-10-13 133 views
0

的「沉重」的方法我必須做到以下幾點:異步執行的GUI

Public Sub OnMouseMove 

    If mouseDownButNotYetMoved Then 
    myObjectsStateArchive.SaveObjectsState(myCurrentObjectsState.Clone()) 
    End If  

    MoveObjectsWithMouse() 

End Sub 

的問題是,SaveObjectsState方法很「重」。因此,當用戶移動鼠標時,它會相應地移動對象,但對象被「延遲」,因爲它等待SaveObjectsState完成...

我想可能異步執行保存。 ..我的意思是,所有的對象都在當前線程,myObjectsStateArchive和myCurrentObjectState ...只是克隆和保存操作「平行」

什麼是最好的方法,使用ThreadPool或類似的東西?

Public Sub OnMouseMove  
    If mouseDownButNotYetMoved Then 
    System.Threading.ThreadPool.QueueUserWorkItem(_ 
     New Threading.WaitCallback(_ 
     Sub(o) 
      myObjectsStateArchive.SaveObjectsState(myCurrentObjectsState.Clone()) 
     End Sub)) 
    End If  

    MoveObjectsWithMouse() 
End Sub 

回答

2

您可以使用TaskFactory.StartNew Method提供.NET 4 從另一個article

.NET 4中新的任務模式對 與UI線程的同步具有內置支持。這使得編寫與之前的用戶界面交互更加容易的應用程序比以前更加容易 。

0

您可以使用BackgroundWorker,使用線程來實現任務。您可以顯示一個進度條(或任何其他通知方式),但大約從一個線程更新GUI,TI鏈接可能有助於護理:How to update GUI with backgroundworker?

+0

我不需要任何進度條。我只是想讓沉重的「保存」在圖形對象移動時執行「並列」,並且不會延遲第一次移動......我的意思是,所有對象都在當前線程中,myObjectsStateArchive和myCurrentObjectState ...只是克隆和保存操作是「平行」 – serhio