天天看点

C#学习之五---WPF-UI线程

写这篇记录是因为在今天逛博客,搜索关于C#的资料,看到很多大神的神作,惭愧哦,自己写的都是写学习步骤,没啥技术含量,但是作为自己的学习笔记,我愿意这么写下去...加油!!!

在 何戈洲前辈 的作品中有关于C#--WPF的作品,我今天看了一些,很有用,这是他的C# -WPF篇的网站:http://www.cnblogs.com/hegezhou_hot/category/260429.html

大家可以去他那里学习,我只记录自己今天的学习:

我用我上次的  C#学习之二---创建简单的图形应用程序-WPF  来做实验,在里面加了一个Button,改名为UI;

如图:

C#学习之五---WPF-UI线程

其代码如下:

private void textUi_Click(object sender, RoutedEventArgs e)
        {
            Thread t = new Thread(delegate()
            {
                this.userName.Text = " 测试UI";

            });
            t.Start();
        }
           

运行会出现如下错误:

C#学习之五---WPF-UI线程

WPF中的UI控件,如果我们探究本质,他们都是从DispatcherObject继承,所以都必须由UI线程进行调度和使用,如果我们在其他的后台线程中操作界面相关的元素时,就会出现如下的异常信息:(这是复制过来的)

我们更改程序如下:

private void textUi_Click(object sender, RoutedEventArgs e)
        {
            Thread t = new Thread(delegate()
            {
                //this.userName.Text = " 测试UI";
                this.userName.Dispatcher.Invoke(new Action(delegate() { userName.Text = " 测试UI"; }));

            });
            t.Start();
        }
           

记得在开头加上一句:

using System.Threading; 
           

如下是运行结果,我们先点击UI,然后点击OK,结果如图:

C#学习之五---WPF-UI线程

我们需要知道,最终还是由UI线程进行执行即可,当我们在WPF中进行多线程编程时需要特别的注意。在后面的MVVM编程的过程中,我们队ViewModel中的绑定源对象进行修改时,也需要注意这个问题。(这是复制过来的)

在此感谢 何戈洲前辈 ,今天到此为止.

OVER!!!

继续阅读