我必须做以下事情:
Public Sub OnMouseMove
If mouseDownButNotYetMoved Then
myObjectsStateArchive.SaveObjectsState(myCurrentObjectsState.Clone())
End If
MoveObjectsWithMouse()
End Sub
问题是SaveObjectsState
方法非常“重”。因此,当用户移动鼠标时,它会相应地移动对象,但是对象被“延迟”,因为它等待SaveObjectsState
完成...
我想可能异步执行保存...我的意思是,所有对象都在当前线程中,myObjectsStateArchive和myCurrentObjectState ...只是克隆和保存为“paralelized”的操作
使用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
答案 0 :(得分:2)
您可以使用.NET 4中提供的TaskFactory.StartNew Method。 来自另一个article:
.NET 4中的新任务模式具有内置支持 与UI线程同步。这使得写作平行 与用户界面交互的应用程序比以往更容易 之前。
答案 1 :(得分:0)
您可以使用BackgroundWorker,使用线程来完成任务。您可以显示进度条(或任何其他通知方式),但要注意从线程更新GUI,ti链接可能有帮助:How to update GUI with backgroundworker?