ObservableCollection方法add()阻塞
本文关键字:阻塞 add 方法 ObservableCollection | 更新日期: 2023-09-27 18:03:00
我正在做一个项目(c# &WPF),其中一些服务器以这种方式添加到列表框中:
ObservableCollection<ServerObjects> servers;
ServerObjects so = getServers();
servers->add(so);
我的问题是,这个函数是阻塞的,而项目被添加到我的列表框,我不能选择任何只有在生成完成后(也程序冻结)。
知道我该怎么做才能使这个函数异步吗?
谢谢。
void addServers(ObservableCollection<ServerObjects> ACollection)
{
//For Common szenarios dont use new Thread() use instead ThreadPool.QueueUserWorkItem(..) or the TaskFactory
Task.Factory.StartNew(()=> this.LoadServer());
}
void MyThreadMethod(Object obj)
{
ServerObjects so = getServers();
// The invoke is important, because only the UI Thread should update controls or datasources which are bound to a Control
UIDispatcher.Invoke(new Action(()=> (obj as ObservableCollection).add(so));
}
你也可以在RX上在TaskScheduler上返回一个IObservable订阅,并在Dispatcher上观察。
->线程池vs.s创建自己的线程
像这样?:
void addServers(ObservableCollection<ServerObjects> ACollection)
{
Thread T = new Thread(new ParameterizedThreadStart(MyThreadMethod));
T.Start(ACollection);
}
void MyThreadMethod(Object obj)
{
ServerObjects so = getServers();
(obj as ObservableCollection).add(so);
}
服务器的加载现在在另一个线程上执行。