2011-10-13 100 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