【发布时间】:2009-08-12 01:54:29
【问题描述】:
我有一个线程调用一个从 Internet 获取一些东西的对象。当此对象填满所需的所有信息时,它会引发一个事件,该对象将包含所有信息。该事件被启动线程的控制器消费。
事件返回的对象随后被添加到通过视图模型方法绑定 GUI 的集合中。
问题是我无法将 CheckAccess 与绑定一起使用...如何解决使用从主线程的其他线程创建的对象的问题?
将对象添加到主线程的集合时收到的错误是:
这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。
这是控制器:
public class WebPingerController
{
private IAllQueriesViewModel queriesViewModel;
private PingerConfiguration configuration;
private Pinger ping;
private Thread threadPing;
public WebPingerController(PingerConfiguration configuration, IAllQueriesViewModel queriesViewModel)
{
this.queriesViewModel = queriesViewModel;
this.configuration = configuration;
this.ping = new Pinger(configuration.UrlToPing);
this.ping.EventPingDone += new delPingerDone(ping_EventPingDone);
this.threadPing = new Thread(new ThreadStart(this.ThreadedStart));
}
void ping_EventPingDone(object sender, QueryStatisticInformation info)
{
queriesViewModel.AddQuery(info);//ERROR HAPPEN HERE
}
public void Start()
{
this.threadPing.Start();
}
public void Stop()
{
try
{
this.threadPing.Abort();
}
catch (Exception e)
{
}
}
private void ThreadedStart()
{
while (this.threadPing.IsAlive)
{
this.ping.Ping();
Thread.Sleep(this.configuration.TimeBetweenPing);
}
}
}
【问题讨论】: