[英]WPF UI Update from excel
我有一個正在啟動的加載頁面(通常我的主頁在啟動時加載它,但我最近交換了它)。 我有一個 excel 文件,里面有大量數據。 我有一個用於轉儲該數據的課程。 我還為我要創建的每個列表創建了一個類。 加載頁面應該隨着它的進行更新它的百分比。
我能夠讓它在下面的例子中工作。
public partial class Window1 : Window
{
public MainController main = new MainController();
public ExcelImporter tempExcel = new ExcelImporter();
List<Character.MainRace> listRaces = new List<Character.MainRace>();
List<string> tempString = new List<string>();
public Window1()
{
InitializeComponent();
BackgroundWorker worker = new BackgroundWorker();
worker.RunWorkerCompleted += worker_RunWorkerCompleted;
worker.WorkerReportsProgress = true;
worker.DoWork += worker_DoWork;
worker.ProgressChanged += worker_ProgressChanged;
worker.RunWorkerAsync();
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBarTest.Value = e.ProgressPercentage;
textBlockPercent.Text = e.ProgressPercentage.ToString() + "%";
textBlockTest.Text = (string)e.UserState;
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
tempExcel.Create();
tempExcel.SetSheet("Races");
var worker = sender as BackgroundWorker;
worker.ReportProgress(0, String.Format("Process Iteration 1."));
List<string> myRaceName = tempExcel.GetRangeValue("A2", "A46");
List<string> myRaceShortDescription = tempExcel.GetRangeValue("N2", "N46");
for (int raceSelection = 0; raceSelection < myRaceName.Count - 1; raceSelection++)
{
Character.MainRace tempRace = new Character.MainRace();
tempRace.Race = myRaceName[raceSelection];
double percentage = ((double)raceSelection / (double)myRaceName.Count) * 100.0;
Thread.Sleep(10);
worker.ReportProgress((int)percentage, String.Format("Processing " + myRaceName[raceSelection]));
tempRace.ShortDescription = myRaceShortDescription[raceSelection];
listRaces.Add(tempRace);
}
worker.ReportProgress(100, "Done Processing");
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("All Done!");
progressBarTest.Value = 0;
textBlockTest.Text = "";
}
}
確實有兩個地方我需要更新 UI。 每次我為每個加載器加載一組新數據時,如人類、精靈等,用於種族和戰士、聖騎士、小偷等。 以及當我繼續處理下一組數據時,例如 Classes Race、Feats 等(雖然為了保持這個更短一些,我只包括僅顯示 1 個種族。
我對一般編碼很陌生,尤其是 wpf。 我一直在經歷一些教程。 我試過使用 INotifyproperty、后台工作人員、調度員、綁定和不綁定內容。 我只是不明白。 一切都單獨工作,但不能一起工作。 據我了解,這是因為作為主線程的 UI 線程由於我的漫長過程而被阻塞。
正如 Jeroen 提到的,我們需要一個例子。 您正在嘗試根據 [ cringe ] 硬編碼 Excel 范圍的內容更新 WPF UI。 我猜工作簿導入部分有效,但用戶界面凍結了? 還是不更新?
首先,嘗試使用DataGrid
在 UI 上顯示您的數據。 將其ItemsSource
綁定到一個類的List
(或ObservableCollection
),該類可以很好地保存所有相關數據。 DataGrid
應該完成剩下的工作,因為AutoGenerateColumns
默認為 true。
然后,為了獲得進一步的幫助,您必須嘗試一些東西並提供一個可重現的失敗示例。 顯示您的BackgroundWorker
的實現將提供一些關於保持主 UI 線程的線索。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.