界面上一个 进度条 PB1 一个label LB1 一个TreeView tree,现在建了两个进程,分别进行操作,鼠标拖动窗口无卡顿。但如果在Code1处访问 tree 【TreeViewItem item = (TreeViewItem)tree.SelectedItem;】,会出现跨线程问题,若把 thr 改为 this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new MyDelegate(thread1));界面就会产生明显的卡顿现象。怎么解决?
Thread thr;
Thread thr1;
private delegate void MyDelegate();
private void Button_Click(object sender, RoutedEventArgs e)
{
PB1.Maximum = 10;
PB1.Value = 0;
thr = new Thread(new ThreadStart(thread1));
thr.IsBackground = true;
thr.Start(); thr1 = new Thread(new ThreadStart(thread2));
thr1.IsBackground = true;
thr1.Start();
}
private void thread1()
{
//Code1 TreeViewItem item = (TreeViewItem)tree.SelectedItem;
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
this.Dispatcher.Invoke(DispatcherPriority.Normal, new MyDelegate(changelabel));
}
}
private void thread2()
{
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
this.Dispatcher.Invoke(DispatcherPriority.Normal, new MyDelegate(changepb));
}
}
private void changelabel()
{
LB1.Content = (Convert.ToInt32(LB1.Content) + 1).ToString();
}
private void changepb()
{
PB1.Value = PB1.Value + 1;
}WPF多线程
谢谢提示。 如果在线程中,需要获取某一个或几个界面元素相关属性信息来进行下一个过程,如何操作呢?
有没有例子学习?谢谢
数据绑定后,绑定的数据直接反映你绑定的元素的对应属性,直接操作绑定的数据就好了。当然前提是你想获取的属性是依赖项属性才能绑定。非依赖项属性就写个Behaviors就好了。
若需要对TreeView进行获取和操作,如SelectedItem、items等,有例子学习吗?
若需要对TreeView进行获取和操作,如SelectedItem、items等,有例子学习吗?
http://www.codeproject.com/Articles/26288/Simplifying-the-WPF-TreeView-by-Using-the-ViewMode
这个挺好的,可以作为参考。