首页 新闻 搜索 专区 学院

BackGroundWorker的DoWork事件中File.WriteAllText 和bgw_ProgressChanged的问题

0
[已解决问题] 解决于 2017-11-16 12:46
复制代码
 1  使用BackGroundWorker出了个问题,File.WriteAllText方法生成400多字节的文本文件,执行完后(也可能执行过程中) 下一次foreach循环就开始了,而没有及时执行bgw_ProgressChanged事件,等下次执行的过程中,bgw_ProgressChanged才会执行上次循环的进度100,,求大牛们帮帮忙.          
 2 
 3   private void bgw_DoWork(object sender, DoWorkEventArgs e)
 4  5                     .....
                 //耗时操作
 6               foreach (KeyValuePair<string, AccModel> acc in dic)
 7               {    
 8                   ....
 9                 value += 20 / acc.Value.AccY_Name.Count;
10                 bgw.ReportProgress(value);
11                 StringBuilder sb = GetConfig(acc.Value.SavePath, acc.Key, acc.Value);
12                 string target = string.Format(@"{0}\{1}\{2}\Act.Lst", acc.Value.SavePath, acc.Key, DateTime.Now.ToString("yyyy-MM-dd").Replace("-", string.Empty));        
13                 File.WriteAllText(target, sb.ToString(), Encoding.Default);
14                 //上面执行过程中,直接去下次foreach循环了
15                 value = 100;
16                 bgw.ReportProgress(value);
17                  ....
18               }
19
复制代码
问题补充:

执行单步就没问题,用了Thread.Sleep效果也不太好

Ray&#39;s的主页 Ray&#39;s | 初学一级 | 园豆:192
提问于:2016-10-23 23:50
< >
分享
最佳答案
0

lock(syncObject)

....

奖励园豆:5
Daniel Cai | 专家六级 |园豆:10374 | 2016-10-24 11:30

你好 你说的lock是要锁定哪块?

Ray&#39;s | 园豆:192 (初学一级) | 2016-10-24 20:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册