现在有个Btn事件,点击Btn后会有一定的处理时间,在这个时间内要做个进度条
就是意思,点击Btn后同时显示进度条,Btn事件结束进度条关闭
我做了个自定义的进度条Window我在Btn事件中开了个DispatcherTimer的线程来运行进度条Window,但是效果却是Btn事件结束后DispatcherTimer线程才启动。。请问 一定要主线程运行结束子线程才启动?如何能做到Btn与进度条的同步呢?

解决方案 »

  1.   

    进度条 用一个 form  来代替,就是 自己做个窗体放上一个 gif 滚动条 当作 滚动条界面
    用backgroundworker 异步打开这个 滚动条界面
    在backgroundworker  dowork 事件里面操作 数据, 
     在backgroundworker   RunWorkerCompleted 里面 进行 关闭进度条
      

  2.   

    在Btn的点击事件里启动你的DispatcherTimer呀
      

  3.   

    看下我的代码:        public void btn_CreateClick(object sender, RoutedEventArgs args)
            {
                this.Cursor = Cursors.Wait;            dispatcher = new DispatcherTimer();
                dispatcher.Tick += new EventHandler(dispatcher_Tick);
                dispatcher.Start();
                
                ......
            }        void dispatcher_Tick(object sender, EventArgs e)
            {
                dispatcher.IsEnabled = false;
                Progess p = new Progess();
                p.Show();
            }
    现在的结果是btn_CreateClick里的事件处理完后才会显示Progess....
      

  4.   


    backgroundworker  主要把这个控件 搞会就行了
    一个开始线程的方法: this.backgroundWorker1.RunWorkerAsync();
    执行线程的事件: backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    这里面 写 处理 方法,就是 耗时的操作,这里面打开进度条窗体
    线程结束事件:backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    如果 DoWork 中的 方法执行完了,也就是说 异步操作完成了 就会执行 RunWorkerCompleted 事件,这里面可以 关掉 进度条窗体
      

  5.   

    这个backgroundworker 是跟DispatcherTimer一样 是个开进程的方法是吗? 我看看是怎么用的 呵呵
      

  6.   

     new Thread(new ThreadStart(delegate
                {
                 //这里写你要在线程里执行的代码
                   Progess p = new Progess();
                 p.Show();
                }
                 )).Start();
     这样写写看!
      

  7.   

    额 我现在是做的WPF 里面好像没有BackGroundWorker这个控件
      

  8.   

    我这样写了 但是在Progess页面里报了个错误
    调用线程必须为 STA,因为许多 UI 组件都需要。