博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原】C#子线程刷新主线程一例
阅读量:7218 次
发布时间:2019-06-29

本文共 3890 字,大约阅读时间需要 12 分钟。

要求:如下图,使用线程操作

1、实时显示当前时间

2、输入加数和被加数,自动出现结果

分析:两个问题解决的方式一致,使用子线程进行时间操作和加法操作,然后刷新主线程的控件显示结果

1 using System;  2 using System.Threading;  3 using System.Windows.Forms;  4   5 namespace WinThread  6 {  7     public partial class frmMain : Form  8     {  9         public frmMain() 10         { 11             InitializeComponent(); 12         } 13  14         ///  15         /// 初始化 16         ///  17         ///  18         ///  19         private void frmMain_Load(object sender, EventArgs e) 20         { 21             // 控件初始化 22             this.txtOne.Text = "0"; 23             this.txtSecond.Text = "0"; 24  25             // 显示时间操作 26             Thread showTimeThread = new Thread(new ThreadStart(GetTime)); 27             showTimeThread.IsBackground = true; 28             showTimeThread.Start(); 29  30             // 加法操作 31             Thread addThread = new Thread(new ThreadStart(Add)); 32             addThread.IsBackground = true; 33             addThread.Start(); 34         } 35  36         #region 显示时间操作 37  38         ///  39         /// 取得实时时间 40         ///  41         private void GetTime() 42         { 43             try 44             { 45                 while (true) 46                 { 47                     string currentTime = string.Format("{0}.{1}", DateTime.Now.ToLongTimeString(), DateTime.Now.Millisecond); 48  49                     ShowTime(currentTime); 50  51                     Application.DoEvents(); 52                 } 53             } 54             catch (Exception ex) 55             { 56                 Console.WriteLine(ex.Message); 57             } 58         } 59  60         // 定义显示时间操作委托,用于回调显示时间方法 61         delegate void ShowTimeCallBack(string str); 62  63         ///  64         /// 实时显示时间 65         ///  66         ///  67         private void ShowTime(string str) 68         { 69             if (this.txtCurrentTime.InvokeRequired) 70             { 71                 ShowTimeCallBack showTimeCallBack = new ShowTimeCallBack(ShowTime); 72                 this.Invoke(showTimeCallBack, new object[] { str }); 73             } 74             else 75             { 76                 this.txtCurrentTime.Text = str; 77             } 78         } 79  80         #endregion 81  82         #region 加法操作 83  84         ///  85         /// 加法操作 86         ///  87         private void Add() 88         { 89             try 90             { 91                 while (true) 92                 { 93                     int i = Convert.ToInt32(this.txtOne.Text.Trim()); 94                     int j = Convert.ToInt32(this.txtSecond.Text.Trim()); 95  96                     ShowResult((i + j).ToString()); 97  98                     Application.DoEvents(); 99                 }100             }101             catch (Exception ex)102             {103                 Console.WriteLine(ex.Message);104             }105         }106 107         // 定义加法操作委托,用于回调加法操作方法108         delegate void ShowResultCallBack(string result);109 110         /// 111         /// 显示结果112         /// 113         /// 114         private void ShowResult(string result)115         {116             if (this.txtResult.InvokeRequired)117             {118                 // 写法1119                 //ShowResultCallBack showResultCallBack = new ShowResultCallBack(ShowResult);120                 //this.Invoke(showResultCallBack, new object[] { result });121                 122                 // 写法2123                 //使用委托来赋值124                 this.txtResult.Invoke(125                     //委托方法126                     new ShowResultCallBack(ShowResult),127                     new object[] { result });128             }129             else130             {131                 this.txtResult.Text = result;132             }133         }134 135         #endregion136     }137 }

是不是很简单呢?

 

转载于:https://www.cnblogs.com/iflytek/archive/2012/11/22/2781926.html

你可能感兴趣的文章
我就是想找个人聊聊天,说说我这近四年来的经历
查看>>
不同的测试方法使用的场景
查看>>
Hadoop快速入门
查看>>
Problem S
查看>>
SVN上传的时候没法显示文件名,只显示后缀名
查看>>
Python:pygame游戏编程之旅四(游戏界面文字处理)
查看>>
fedroa 编译安装mysql5.5
查看>>
WC2018游记
查看>>
毕设开发日志2017-10-23
查看>>
***微信公众平台开发: 获取用户基本信息+OAuth2.0网页授权
查看>>
第二章 例题2-2 在屏幕上显示两个短句
查看>>
【转】iOS学习之适配iOS10
查看>>
OC语言BLOCK和协议
查看>>
C++创建一个动态链接库工程
查看>>
(六)maven之本地仓库
查看>>
如何使用 SPICE client (virt-viewer) 来连接远程虚拟机桌面?
查看>>
CentOS7
查看>>
linux高编IO-------tmpnam和tmpfile临时文件
查看>>
微信的机器人开发
查看>>
从零开始学Java(二)基础概念——什么是"面向对象编程"?
查看>>