使用按钮标记

时间:2014-02-17 04:46:51

标签: c# .net events thread-safety

假设程序逻辑基于随机的东西更改按钮标记 - 但使用UI线程。

在Click事件中使用Button Tag值是否可靠?即它是否与事件处理程序时的值相同,就像点击时一样?

如果没有,将特定于事件的参数传递给一个安全的按钮点击事件的最佳方法是什么?

更新

根据要求添加了一个示例。 (记住这只是理论上的。)

Windows.Forms.Timer timer = new Timer();
timer.Interval = 1;
timer.Tick += new EventHandler(timer_tick);
timer.Start();

void timer_tick(object sender, EventArgs e)
{
    this.button.Tag = Random.NextInt(100).ToString();
}

void button_click(object sender, EventArgs e)
{
    string s = (string)((Button)sender).Tag;
    Console.WriteLine("Tag value as at button push: " + s);
}

换句话说,问题归结为:可以将事件嵌入到GUI事件队列中,以便在按下按钮和处理推送的点击事件之间更改按钮的状态吗?

1 个答案:

答案 0 :(得分:0)

假设您使用的是winforms。

恕我直言,您可以使用Tag属性传递控件特定参数,但您还必须记住,窗体控件不是线程安全的。要进行线程安全调用,您必须使用InvokeRequired。以下链接给出了一个以线程安全的方式为TextBox设置文本的示例,但Tag属性不应该有很大不同。

http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx

希望这有帮助。