繁体   English   中英

使用委托进行异步等待 c#

[英]Using delegate for async await c#

我想使用委托来调用 function,它应该在 UI 上显示我的进度条更新。 我怎样才能做到这一点?

第一个带代表的 class

 public delegate void DelegateProgress();
 public DelegateProgress mDelegateProgress;
 public callDelegate(){
 mDelegateProgress();
}

在我的用户界面 class 中,它看起来像这样:

tReaderFaces.mDelegateProgress = tReaderFaces_ProgressChanged;
 private void tReaderFaces_ProgressChanged()
    {
        lStatus.Content = "Checking Component " + mComponentCounter++ + "/" + mContext.mComponents.Count();
        ++pProgress.Value;
    }

我怎样才能做到这一点异步?

我建议您使用 BackgroundWorker class,因为它会自动将 ProgressChanged 事件处理程序中的任何调用编组回 UI 线程:

    private void prgg(int maxProgress) //called on the UI thread
    {
        progressBar1.Value = 1;
        progressBar1.Minimum = 1;
        progressBar1.Maximum = maxProgress;

        var bgw = new BackgroundWorker();
        bgw.ProgressChanged += bgw_ProgressChanged;
        bgw.DoWork += bgw_DoWork;
        bgw.WorkerReportsProgress = true;
        bgw.RunWorkerAsync();
    }

    void bgw_DoWork(object sender, DoWorkEventArgs e)
    {
        // do your long running operation here (this will execute on a background thread)
        for (int i = 1; 0 < maxProgress; ++i)
        {
            //do some work...
            ((BackgroundWorker)sender).ReportProgress(i);
        }
    }

    void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        progressBar1.Value = e.ProgressPercentage;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM