我正在使用wpf,我需要使用類更新視圖的元素。 所以,我有三個文件:如何異步更新顯示信息的標籤
- MainWindow.xaml - >我在哪裏要更新的元素。
- MainWindow.xaml.cs - >我在哪裏調用其他類的函數(utils.cs)。
- Utils.cs - >在這裏我們可以找到函數freeSpace()(這個函數計算磁盤上的空閒空間),在這個函數中我想改變MainWindow.xaml中的一個標籤。
我需要改變的元素是一個標籤。
爲什麼mainwindow自己的代碼不能從函數中獲得一個新名字並自己做出更改? 我想要在主窗口代碼之外完成計算,以獲得清晰的代碼。
我在這種情況下的問題是,在Utils.cs我有兩個函數,copy()和freeSpace()。複製功能複製文件並調用freeSpace。在自由空間中,我有一個循環,每10秒檢查一次空閒空間,直到複製完成。所以每隔10秒我需要更改代表可用空間的標籤。
MainWindow.xaml
<Label x:Name="freeSpaceLabel"></Label>
MainWindow.xaml.cs
private void btnStart_Click(object sender, RoutedEventArgs e)
{
Utils u = new Utils();
u.copy();
}
Utils.cs
private void freeSpace(){
while (isFinish())
{
// Update the label
[...]
drive.TotalFreeSpace; //return an int, I just want to set this int to the label of my view.
[...]
Thread.Sleep(10000);
}
}
private void isFinish(){
// Return true if the copy is finish
// Return false if the copy is not finish
}
private void copy(){
//Copy a file
freeSpace();
}
我不認爲傳遞的看法是一個很好的解決方案。
感謝您的幫助!
這不是異步,它在一個單獨的線程池線程上執行,事實上在這個'Task.Run'中也是首選。也等待任務塊的主線程,這打敗了目的 –
哦,我沒有注意到等待方法編輯 – tabby
現在它不會停止任務完成:)和按鈕啓動將完成執行,您需要Async -Await,因爲這是隻有機制才能完成 –