【原】C#子线程刷新主线程一例

摘要:
要求:如下图所示,使用线程操作1.实时显示当前时间2.输入加数和加数,并自动分析结果:两个问题以相同的方式解决。使用子线程执行时间操作和加法操作,然后刷新主线程的控件以显示结果1UsingSystem;2使用系统。穿线;3使用System.Windows。形式;45namespaceWinThread6{7publicpartialclassfrmMain:Fo

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

1、实时显示当前时间

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

【原】C#子线程刷新主线程一例第1张

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

  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         /// <summary>
 15         /// 初始化
 16         /// </summary>
 17         /// <param name="sender"></param>
 18         /// <param name="e"></param>
 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         /// <summary>
 39         /// 取得实时时间
 40         /// </summary>
 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         /// <summary>
 64         /// 实时显示时间
 65         /// </summary>
 66         /// <param name="str"></param>
 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         /// <summary>
 85         /// 加法操作
 86         /// </summary>
 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         /// <summary>
111         /// 显示结果
112         /// </summary>
113         /// <param name="result"></param>
114         private void ShowResult(string result)
115         {
116             if (this.txtResult.InvokeRequired)
117             {
118                 // 写法1
119                 //ShowResultCallBack showResultCallBack = new ShowResultCallBack(ShowResult);
120                 //this.Invoke(showResultCallBack, new object[] { result });
121                 
122                 // 写法2
123                 //使用委托来赋值
124                 this.txtResult.Invoke(
125                     //委托方法
126                     new ShowResultCallBack(ShowResult),
127                     new object[] { result });
128             }
129             else
130             {
131                 this.txtResult.Text = result;
132             }
133         }
134 
135         #endregion
136     }
137 }

是不是很简单呢?

 

免责声明:文章转载自《【原】C#子线程刷新主线程一例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Swing之滚动条Google的PageRank算法浅析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

CentOS7 初始化配置

允许新TCP连接net.ipv4.TCP _ tw_ reuse=1net.ipv4.TCP _ mem=945000009150000009270000000net.ipv4 TCP _ fin_ Timeout=1#启用keepalive时,TCP发送keepalive消息的频率。默认值为2小时net.ipv4.tcp _keepalive_Time=3...

Java switch 枚举

Switch可以使用int.short、char、Enum和String其中,Enum是1.5之后的新特性,String是java8的新特性。所以正确的写作应该如下。...

001_Three.js中的跨域问题

】当请求的资源和请求脚本不在同一域中时,将发生跨域。有关详细信息,请参见链接。这是一个需要进一步考虑的问题。它是一个装载机。它加载本地资源。为什么要跨域请求?...

CentOS7上使用history删除部分历史记录

使用history命令删除登录后创建的历史记录,但保留原始记录。如果未执行history命令,则直接使用history-r命令将文件中的历史刷新到此处的缓存中,并且不会保存以前操作的记录。修改后,执行:history-c以清除当前会话历史中的历史缓存-r以读取~/。bash_您可以看到历史文件中的历史记录已在缓存中更新。...

vue中获取客户端IP地址

ice||!ice.candidate||!...

获取用户当前位置信息的两种方法——H5、微信

在之前调用百度地图API的总结中,我使用H5获取了当前位置信息。事实上,微信还提供了一种获取用户地理位置的方法。现在我们将发布这两种方法,并根据情况选择使用它们。varspeed=响应。速度;//速度,单位:米/秒varaccuracy=res精度;//位置精度}});3、 从地理位置和地图显示中获得的经度和纬度可以使用百度地图或高德地图显示,也可以在微信内...