Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#石英更新用户界面_C#_Wpf_Quartz Scheduler - Fatal编程技术网

c#石英更新用户界面

c#石英更新用户界面,c#,wpf,quartz-scheduler,C#,Wpf,Quartz Scheduler,我创建了一个小应用程序。我每5秒钟创建一个字符串和作业的可观察集合(石英),在集合中添加新项,但ui不更新。请帮忙 public partial class MainWindow : Window { public ObservableCollection<string> Products { get; set; } //my logic..... public void UpdateCol() { Products.Add("

我创建了一个小应用程序。我每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????
    }
}
公共部分类主窗口:窗口
{
公共可观测集合乘积{get;set;}
//我的逻辑。。。。。
公共void UpdateCol()
{
产品。添加(“2”);
}
} 
公共类考试:IJob
{
public void Execute(IJobExecutionContext上下文)
{
//如何从主窗口从UpdateCol调用方法????
}
}

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

若我创建了一个窗口,那个么在另一个类(Test)中执行调用,我将获得关于线程sta的exeption
private object lock_ = new object();
public MainWindow()
{
   Products = new ObservableCollection<string>();
   BindingOperations.EnableCollectionSynchronization(Products, lock_);
}
public void Execute(IJobExecutionContext context)
{
    window.Dispatcher.BeginInvoke(new Action(window.UpdateCol));
}