我有一個小的.net 4.0應用程序,基本上比較文件日期,如果文件更改將這些從位置a複製到位置b。當這個複製工作完成時,它顯示很少的UI和進度條等。.net 4.0異步文件副本
如何做這個文件最後寫入時間比較和文件複製異步?作爲即時開始這樣做後,應用程序啓動,應用程序用戶界面加載非常緩慢,用戶界面不更新正確(因爲我的應用程序正在等待文件副本等)。
編輯: ...我想從長期運行的文件任務更新用戶界面,BackgroundWorker有這個選項,但其他選項呢?
我有一個小的.net 4.0應用程序,基本上比較文件日期,如果文件更改將這些從位置a複製到位置b。當這個複製工作完成時,它顯示很少的UI和進度條等。.net 4.0異步文件副本
如何做這個文件最後寫入時間比較和文件複製異步?作爲即時開始這樣做後,應用程序啓動,應用程序用戶界面加載非常緩慢,用戶界面不更新正確(因爲我的應用程序正在等待文件副本等)。
編輯: ...我想從長期運行的文件任務更新用戶界面,BackgroundWorker有這個選項,但其他選項呢?
可以使用BackGroundWorker對於這種類型的事情:
BackGroundWorker worker = new BackGroundWorker();
worker.DoWork += myWorkDelegate; // method, delegate or lambda that does the heavy work
worker.RunWorkerCompleted += myCompletedDelegate; //method delegate or lambda to execute when DoWork has finished
worker.RunWorkerAsync();
您可以通過創建一個任務實現這一目標(例如,做在你的加載方法)
Task.Run(() => DoHeavyStuf());
哪裏可以做重塞入異步(例如I/O)
private void DoHeavyStuf()
{
//Heavy work (simulated by thread.sleep)
System.Threading.Thread.Sleep(5000);
MessageBox.Show("Heavy stuf completed");
}
的方法對於.NET 4.0,你可以使用(學分:Rotem公司)
new Task(DoHeavyStuf).Start();
我認爲Task.Run()是.net 4.5的特性,即時貼在.net 4.0中。 – devha
Ahhhhh。一個線程上的I/O! :sadface: –
您可以添加庫來處理.NET 4.0的任務和異步/等待。 (http://msdn.microsoft.com/en-us/library/dd460717(v=vs.110).aspx)檢查nuget –
如果你只是想通知UI操作完成後,就可以使用這個(在.NET 4.0):如果你想在這一進程中複製多個文件的通知UI
Task.Factory.StartNew(() =>
{
//Copy file here
}).ContinueWith((prevTask) =>
{
if (prevTask.Exception != null)
{
// log/display exception here
return;
}
//display success result here
}, TaskScheduler.FromCurrentSynchronizationContext());
,你可以使用這個:
var currentSyncContext = SynchronizationContext.Current;
Task.Factory.StartNew(() =>
{
//do some work
currentSyncContext.Send(new SendOrPostCallback((arg) =>
{
//your UI code here
}), "your current status");
//do some work
});
在'Task'或'Thread'中啓動它? – Rotem