Winform 线程中修改控件属性.时钟示例
2014-12-30 02:04
656 查看
Winform 在创建控件以外的线程中修改控件属性,必须使用 Invoke() 方法
如本窗体 Form1:
![](http://img.blog.csdn.net/20151201124511931?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
如本窗体 Form1:
if(this.InvokeRequired)//InvokeRequired 属性可以判断是否有必要执行 this.Invoke(FlushClient);//FlushClient 委托另一个定义的方法 ThreadFunction 修改窗体控件属性
namespace WindowsFormsApplication2 { public partial class Form1 : Form { Font shengFont = new Font("宋体", 12); Font consolasFont = new Font("Consolas", 12); Thread th; public Form1() { InitializeComponent(); button3.Text = "停"; th = new Thread(new ThreadStart(MyWatch)); th.Start(); } bool run = true; private void MyWatch() { while (run) { //如果在线程中像下面这样修改控件属性,会收到错误提示信息。 //this.label1.Text = DateTime.Now.ToLongDateString() + "\n" + DateTime.Now.ToLongTimeString(); UpdataText(DateTime.Now.ToLongDateString() + "\n" + DateTime.Now.ToLongTimeString()); Thread.Sleep(100); } } private delegate void TextDelegate(string timeText);//定义委托 private void UpdataText(string timeText) { if (label1.InvokeRequired) { TextDelegate tdege = delegate (string s) {//使用委托 label1.Text = s; }; label1.Invoke(tdege, timeText); } } private void button1_Click(object sender, EventArgs e) { label1.Font = shengFont; } private void button2_Click(object sender, EventArgs e) { label1.Font = consolasFont; } private void button3_Click(object sender, EventArgs e) { if (run) { th.Abort(); run = false; Thread.Sleep(100); button3.Text = "开"; }else { run = true; th = new Thread(new ThreadStart(MyWatch)); th.Start(); button3.Text = "停"; } } } }
相关文章推荐
- 跨线程访问及修改控件属性的解决方案
- winform 跨线程设置或读取控件的属性
- 在线程中修改Windows控件的属性
- winform程序中如何跨线程修改控件的值
- C# 跨线程访问及修改控件属性
- WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )
- C#用副线程改主线程(UI线程)的控件属性的方法(包括Winform和WPF)
- 在线程中修改窗体控件的属性
- 关于线程中修改UI的控件属性
- C# Winform使用线程改变窗体控件的属性
- .NET WinForm中 一个 跨线程访问控件的示例(网络)
- C# 线程中修改控件属性方式
- winform 跨线程设置控件属性
- 解决WinForm中ComboBox控件的“设置"DataSourse”属性后无法修改项集合”以及两个不相关联的ComboxBox控件实现数据列表显示不可实现的问题
- 黄聪:C#“多线程线程间操作无效: 从不是创建控件的线程访问它。”,跨线程修改控件属性解决方案
- 为什么Winform不允许跨线程修改UI线程控件的值?
- 解决.net中Winform父控件修改Font属性,对子控件布局的影响
- Dot Net WinForm 控件开发 (七) 为属性提下拉式属性编辑器
- Dot Net WinForm 控件开发 (三) 自定义类型的属性需要自定义类型转换器
- winform跨线程调用控件