wpf 使用ObservableCollection 时 掉用多线程(下载)时
添加列队失效。。。。。。。
[解决办法]
这些代码没什么问题,看插入数据的部分。
[解决办法]
对于多线程需要特殊处理
- C# code
SynchronizationContext ctx = SynchronizationContext.Current; if (PropertyChanged != null) { if (ctx == null) { PropertyChanged(this, new PropertyChangedEventArgs(sender.GetType().ToString())); } else { ctx.Send(p => PropertyChanged(this, new PropertyChangedEventArgs(sender.GetType().ToString())), null); } }
[解决办法]
[解决办法]
在wpf中可以使用UI控件的Dispatcher跳转至UI线程中,达到对UI的修改,可参考如下代码。
- C# code
public partial class MainWindow : Window { private int i = 0; private ObservableCollection<User> usrList = new ObservableCollection<User>(); public MainWindow() { InitializeComponent(); this.datagrid.ItemsSource = usrList; Thread thread = new Thread(new ThreadStart(Process)); thread.Start(); } void Process() { while (i++ < 10000) { Action action = () => { usrList.Add(new User(i.ToString(), DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss fffffff"))); textshow.Text = string.Format("当前共产生{0}条数据", i.ToString()); }; this.Dispatcher.BeginInvoke(action); Thread.Sleep(10); } } }