新人求助

zsw1809 2017-04-13 09:12:49
最近写个小程序,用到了wpf(平时主要web开发,客户端写的较少),需要加一个进度条,考虑到刷新问题,使用了线程,
代码如下:

private void btn_out_Click(object sender, RoutedEventArgs e)
{
if (tb_path.Text.Trim() != "")
{
btn_out.IsEnabled = false;
string conn = tb_Data.Text.Trim();
Thread thread = new Thread(() => fileOut(conn));
thread.Start();
}
else
{
System.Windows.MessageBox.Show("请选择文件输出路径");
}
}


fileOut方法中使用了this.Dispatcher.BeginInvoke,但是仍然出现了UI占用的错误

对多线程这块接触比较少不明白,麻烦各位大神给解答下
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsw1809 2017-04-13
  • 打赏
  • 举报
回复

 private void fileOut(string conn, List<string> codeList, string path, string newPath)
        {
            if (codeList.Count > 0)
            {
                if (conn != "")
                {
                    var data = new DA_File.Data.toData(conn);

                    int count = 0;
                    foreach (var item in codeList)
                    {
                        count += data.getCount(item);
                    }
                    this.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        if (p_jd.Maximum != count)
                        {
                            p_jd.Maximum = count;
                        }
                        p_jd.Value = 0;
                        this.l_msg.Content = "共" + count + "个文件";
                    }));
做了点修改, 问题找到了,发现如果断点打在BeginInvoke里面,提示就是好的,在外面就提示报错;另外,刷新也好了,这个比较奇怪,之前是不刷新,估计还是我其他代码里有问题,后来给改掉了. 还是十分感谢
xuggzu 2017-04-13
  • 打赏
  • 举报
回复
应该是BeginInvoke前面代码有问题。给出fileOut()前面代码。
zsw1809 2017-04-13
  • 打赏
  • 举报
回复
还有奇怪的是这个方法结尾的时候有

  this.Dispatcher.BeginInvoke(new Action(() =>
            {
                btn_out.IsEnabled = true;
            }));
这段代码,反而执行没问题

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧