簡體   English   中英

進度條,用於在Parallel.ForEach中長時間運行

[英]Progress bar for long running process in Parallel.ForEach

此方法-doDayBegin(item.BranchId)需要花費很長時間才能執行。 所以我正在使用Parallel.ForEach並行執行它。 我的問題是,現在我想在網頁上顯示進度,以便用戶知道進度。
我不是線程專家。 所以給我建議我該怎么辦? 我怎么能做到這一點。 我真的沒有任何想法。

   public ActionResult Edit([DataSourceRequest] DataSourceRequest request)
        {
            try
            {

                JavaScriptSerializer js = new JavaScriptSerializer();
                List<DB0010020Vm> _listDB0010020Vm = new List<DB0010020Vm>();

                string dataDB0010020vm = Request.Form["griddetailsvm"];
                if (!string.IsNullOrEmpty(dataDB0010020vm))
                {
                    _listDB0010020Vm = js.Deserialize<List<DB0010020Vm>>(dataDB0010020vm).
                    Where(d => d.IsValid == "YES").ToList();
                }
                DateTime start = DateTime.UtcNow;
                var context = System.Web.HttpContext.Current;


                Parallel.ForEach(_listDB0010020Vm, item =>
                {
                    doDayBegin(item.BranchId, context);
                });

                DateTime end = DateTime.UtcNow;
                TimeSpan duration = end - start;
                return Json(new
                {
                    success = true,
                    message = "Day Begin Process Completed Successfully!" + duration
                });
            }
            catch (Exception e)
            {
                return Json(new
                {
                    success = false,
                    message = e.Message
                });

            }
        }

在doDayBegin函數調用之后,您可以添加幾行以線程安全的方式遞增計數器。 因此,計數器將代表已完成的迭代次數。 要更新進度條,添加一個將對象設置為新值的功能效果很好。

doProcessing(){
    UInt16 count= 0;
    Object countLock= new Object();

    Parallel.ForEach(_listDB0010020Vm, item =>
    {
        doDayBegin(item.BranchId, context);
        lock (countLock) { updateProgressBar(++count); }
    });
}

updateProgressBar(UInt16 progress){
    textBox1.Text = progress;
}

無論您的列表有多長,“ count”都會從0迭代到。

關於報告進度的有用博客文章位於:
http://blog.stephencleary.com/2012/02/reporting-progress-from-async-tasks.html

暫無
暫無

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

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