您的位置:首页 > 其它

Winform 线程中修改控件属性.时钟示例

2014-12-30 02:04 656 查看
Winform 在创建控件以外的线程中修改控件属性,必须使用 Invoke() 方法

如本窗体 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 = "停";
}
}
}
}




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: