奇了个怪了
// 在此处添加事件处理程序实现。
            progressBar.Dispatcher.BeginInvoke(new SendHandle(Send));
delegate void SendHandle();        private void Send()
        {
            int i = 1;
            while (true)
            {
                textBox1.Text = DateTime.Now.ToString("hh:mm:ss fff");
            }
        } 哪里错了

解决方案 »

  1.   

    while (true)
    死循环了,你加点其他处理吧这是WPF吧
      

  2.   

    BeginInvoke不是跟Thread一样 抛个过去他就马上回去处理了吗?》
    那WPF的多线程怎么写啊 我看了下他和WINFORM的不一样
      

  3.   

    窗口失去响应是因为窗口所在线程由于某些原因长时间滞留在某一个函数中,无法处理用户输入(包括鼠标键盘输入)和系统通知(最明显的就是重绘通知)而造成
    所以无法中断的耗时操作(也就是没有机会在中间插入Application.DoEvents。WPF不直接支持这个调用)要从窗口所属线程移出去
    你这里却把操作发送到progressBar所在的线程。
    只是发送过去也没什么问题,如果你要从其他线程访问progressBar必须这样做,关键是你在里面while(true),那肯定要“卡死”你把Dispatcher.BeginInvoke看成Control.BeginInvoke就行了
    这里WPF和WinForm是差不多的
      

  4.   

    死循环
    textBox1.Text = DateTime.Now.ToString("hh:mm:ss fff");
    后加个阻塞
    Thread.Sleep(100);
      

  5.   

    要是this.Dispatcher.BeginInvoke(new SendHandle(Send));呢Dispatcher.BeginInvoke不是异步返回么 不好意思 我C++比较根深蒂固 只认同步异步
    C#刚看了委托 跟C++的函数指针有一比
      

  6.   

    Dispatcher.BeginInvoke不是用于异步操作的,而是把后面的代码发送到Dispatcher对应的线程执行
    如果Dispatcher对应的线程和当前线程不是同一条线程就会形成对当前线程的异步
    this.Dispatcher.BeginInvoke这样做有点画蛇添足,把本来就会在当前线程执行的代码发送到当前线程用于异步操作的是Delegate.BeginInvoke,使用系统线程池中的一条线程执行后面的函数
      

  7.   

    有点小错误,this.Dispatcher也不一定就是当前线程