【问题标题】:c# quartz update uic#quartz更新ui
【发布时间】:2015-10-02 06:43:26
【问题描述】:

我创建了一个小应用程序。我每 5 秒创建可观察的字符串和作业集合(在石英中)我在我的集​​合中添加新项目,但 ui 没有更新。请帮忙

public partial class MainWindow : Window
{
     public ObservableCollection<string> Products { get; set; }
     //my logic.....
     public void UpdateCol()
     {
        Products.Add("2");
     }
} 
public class Test:IJob
{
    public void Execute(IJobExecutionContext context)
    {
        //How call method from UpdateCol from MainWindow????
    }
}

【问题讨论】:

    标签: c# wpf quartz-scheduler


    【解决方案1】:

    您应该在创建集合后首先在集合上调用BindingOperations.EnableCollectionSynchronization,以便可以从后台线程安全地更新它(此解决方案仅适用于 .NET 4.5+):

    private object lock_ = new object();
    public MainWindow()
    {
       Products = new ObservableCollection<string>();
       BindingOperations.EnableCollectionSynchronization(Products, lock_);
    }
    

    在较旧的 .NET 上,您必须使用 Dispatcher objected 来为您完成这样的工作:

    public void Execute(IJobExecutionContext context)
    {
        window.Dispatcher.BeginInvoke(new Action(window.UpdateCol));
    }
    

    【讨论】:

    • 在另一个类中执行调用(测试)如果我创建窗口我得到关于线程 sta 的异常
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多