C# WPF 使用委托修改UI控件

近段时间在自学WPF,是一个完全不懂WPF的菜鸟,对于在线程中修改UI控件使用委托做一个记录,给自已以后查询也给需要的参考:

界面只放一个RichTextBox,在窗体启动时开起两个线程,调用两个函数,每隔1秒写一次当前时间

一 界面XAML如下:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525" WindowStartupLocation="CenterScreen" Loaded="Window_Loaded">
    <Grid>
        <ScrollViewer>
            <RichTextBox HorizontalAlignment="Stretch" Margin="12" Name="richTextBox1" VerticalAlignment="Stretch" />
        </ScrollViewer>
    </Grid>
</Window>

二 在界面启动时开启两个线程:

 1         private void Window_Loaded(object sender, RoutedEventArgs e)
 2         {
 3             //创建线程1
 4             Thread t1 = new Thread(new ThreadStart(T1));
 5             t1.Start();
 6
 7             //创建线程2
 8             Thread t2 = new Thread(new ThreadStart(T2));
 9             t2.Start();
10         }

三 线程调用函数:

        /// <summary>
        /// 线程1调用函数
        /// add by
        /// </summary>
        private void T1()
        {
            while (true)
            {
                Thread.Sleep(TimeSpan.FromSeconds(1));
                ShowMsg(string.Format("T1 {0}", System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss:fff")));
            }
        }
        /// <summary>
        /// 线程2调用函数
        /// add by
        /// </summary>
        private void T2()
        {
            while (true)
            {
                Thread.Sleep(TimeSpan.FromSeconds(1));
                ShowMsg(string.Format("T2 {0}", System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss:fff")));
            }
        }

三 写前端函数:

        private void ShowMsg(string sMsg)
        {
            this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate() {
                richTextBox1.AppendText(string.Format("{0} \r\n",sMsg));
            });
        }
时间: 2024-10-21 21:47:59

C# WPF 使用委托修改UI控件的相关文章

C#学习之在辅助线程中修改UI控件----invoke方法

Invoke and BeginInvoke 转载地址:http://www.cnblogs.com/worldreason/archive/2008/06/09/1216127.html 在Invoke或者BeginInvoke的使用中无一例外地使用了委托Delegate,至于委托的本质请参考我的另一随笔:对.net事件的看法. 一.为什么Control类提供了Invoke和BeginInvoke机制? 关于这个问题的最主要的原因已经是dotnet程序员众所周知的,我在此费点笔墨再次记录到自己

富客户端 wpf, Winform 多线程更新UI控件

前言 在富客户端的app中,如果在主线程中运行一些长时间的任务,那么应用程序的UI就不能正常相应.因为主线程要负责消息循环,相应鼠标等事件还有展现UI. 因此我们可以开启一个线程来格外处理需要长时间的任务,但在富客户端中只有主线程才能更新UI的控件. 解决方法 简单的来说,我们需要从其他的线程来更新UI线程的控件,需要将这个操作转交给UI线程(线程marshal). 方法1: 在底层的操作中,可以有以下的方法: WPF中,在element的Dispatcher类中调用BeginInvoke或者I

网络操作不能直接写在主线程中 以及 为什么不能在子线程中更新UI控件的属性

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //注意: 所有网络操作不能直接写在主线程中 因为所有的网络操作都是耗时的,如果加载到主线程中,会导致与用户的交互出现问题 ,所以要加载到子线程中 // [self loadImage]; [self performSelectorInBackground:@selector(loadImage) withObject:nil]; } //加

UI控件的基本使用

如何修改控件状态• 可见,确实需要经常修改控件状态• 那如何去修改控件的状态呢?方法很简单? 每一个UI控件都是一个对象? 修改UI控件的状态,其实就是修改控件对象的属性? 比如修改UILabel显示的文字,就修改UILabel对象的text属性即可? 比如修改UIImageView显示的图片,就修改UIImageView对象的image属性即可• 不难想到,每一个UI控件肯定都有很多属性,比如:? UIProgressView进度条控件有progress属性(进度值)? UILabel和UIT

IOS开发-UI控件的常见属性

一.概述 程序运行过程中,我们经常要改变控件的显示状态,如下载进度.播放器的播放进度.图片的放大缩小等,那么如何修改呢? 二. 修改UI控件的状态 每个UI控件都是一个对象,要修改这个对象的状态就是要修改这个对象的属性,比如,修改UILabel显示的文字就修改UILabel的text属性 @interface UILabel : UIView <NSCoding> @property(nonatomic,copy) NSString *text; // default is nil @end

Silverlight项目笔记1:UI控件与布局、MVVM、数据绑定、await/async、Linq查询、WCF RIA Services、序列化、委托与事件

最近从技术支持转到开发岗,做Silverlight部分的开发,用的Prism+MVVM,框架由同事搭好,目前做的主要是功能实现,用到了一些东西,侧重于如何使用,总结如下:   1.UI控件与布局     2.MVVM     3.数据绑定     4.await/async     5.Linq查询     6.WCF RIA Services     7.序列化     8.委托与事件 1.UI控件与布局 常用的主要是Grid.StackPanel.Border,其中最常用的的是Grid,是一

IOS Ui控件 修改位置和尺寸,代码添加控件

所有的UI控件最终都继承自UIView,UI控件的公共属性都定义在UIView中, UIView的常见属性 UIView *superview; 获得自己的父控件对象 NSArray *subviews; 获得自己的所有子控件对象 NSInteger tag; 控件的ID(标识),父控件可以通过tag来找到对应的子控件 CGAffineTransform transform; 控件的形变属性(可以设置旋转角度.比例缩放.平移等属性) CGRect frame; 控件所在矩形框在父控件中的位置和尺

【C#/WPF】用Thumb做可拖拽的UI控件

原文:[C#/WPF]用Thumb做可拖拽的UI控件 需求:简单的可拖拽的图片 使用System.Windows.Controls.Primitives.Thumb类 前台: <Canvas x:Name="g"> <Thumb Canvas.Left="10" Canvas.Top="20" Canvas.ZIndex="99" DragDelta="Thumb_DragDelta"&g

Themes、Windows UI控件新玩法—DevExpress WPF v19.2

通过DevExpress WPF Controls,你能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案. 无论是Office办公软件的衍伸产品,还是以数据为中心的商业智能产品,都能通过DevExpress WPF控件来实现.DevExpress WPF Controls v19.2全新发布,新版本增强Themes.Windows UI控件等功能,欢迎立即下载体验最新版哦! DevExpress WPF v19.2正式版下载 Them