【问题标题】:WPF -- Event Threading, GUI updating questionWPF——事件线程,GUI更新问题
【发布时间】:2009-08-07 22:20:02
【问题描述】:

我正在尝试向主窗口发送两个事件,以便我可以显示某种动画,让用户知道我正在更新数据。

这是一个 ObservableCollection 对象,因此 OnPropertyChanged 会立即被主窗口上的绑定拾取。睡眠只是在那里,以便用户可以看到动画。

但是,从未见过第一个 OnPropetyChanged。我假设这是因为我们在这里处于单个线程中,并且 timer_Tick 必须在 GUI 更新之前完成。有什么建议吗?在 VB6 领域,我们将使用 DoEvents 或 Form.Refresh。

谢谢!

private void timer_Tick(object sender, EventArgs e)
    {
        Loading = "Before: " + DateTime.Now.ToString();
        OnPropertyChanged("Loading");

        LoadData();
        Thread.Sleep(1000);

        //Loading = Visibility.Hidden;
        Loading = "After: " + DateTime.Now.ToString();
        OnPropertyChanged("Loading");           
    }

【问题讨论】:

    标签: wpf multithreading binding


    【解决方案1】:

    C# 有一个 Application.DoEvents,但除非绝对必要,否则我不建议使用它。

    您是否尝试将 OnPropertyChanged 调用封装在 Dispatcher.Invoke 中?

    【讨论】:

    • 你不会想帮我写代码吧? ;)
    • N/M 这是我使用的:queryTimer.Dispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate { OnPropertyChanged("Loading"); }));我在上课,所以我不能使用 this.Dispatcher 调用。当我单步执行代码时,在第一次 Dispatch 之后,寡妇变黑,然后只有在我退出计时器滴答后才会刷新......
    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    相关资源
    最近更新 更多