簡體   English   中英

從ViewModel更新UI線程

[英]Update UI Thread from ViewModel

我試圖通過使用BackgroundWorker執行在循環內更新我的UI上的進度條的簡單操作。 我不知道我做錯了什么。 任何幫助是極大的贊賞。

private void ProcessButtonClickAction(object param)
{
   BackgroundWorker BGWUpdateUi = new BackgroundWorker();

   BGWUpdateUi.ProgressChanged += (sender, args) =>
   {
       ProgressBarValue += args.ProgressPercentage;
       ((SelectedDwgFile)args.UserState).Status = "Completed";
   };

   BGWUpdateUi.WorkerReportsProgress = true;

    foreach(var obj in FileList)
    {
        Thread.Sleep(250);
        BGWUpdateUi.ReportProgress(pbvalueIncrement, obj);
    }
}

該集合是一個ObservableCollectionProgressBarValue綁定到進度條的值。

我查看了幾個示例,無論我嘗試哪一個 - BackgroundWorkerDispatcher - 它們都在循環后更新。

將要在后台運行的部分放入DoWork方法,然后調用RunWorkerAsync

private void ProcessButtonClickAction(object param)
{
   BackgroundWorker BGWUpdateUi = new BackgroundWorker()

   BGWUpdateUi.DoWork += (sender, args) =>
   {
       foreach (var obj in FileList)
       {
           Thread.Sleep(250);
           obj.Status = "Completed";
           ProgressBarValue += pbvalueIncrement;
       }
   };
   BGWUpdateUi.RunWorkerAsync();
}

此外,請確保將與UI相關的更新分發回UI線程(否則您將獲得跨線程訪問異常)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM