假设程序逻辑根据随机内容更改按钮标签 - 但使用 UI 线程。
按钮标签值在点击事件中使用可靠吗?即,事件处理程序时的值与单击时的值是否相同?
如果没有,将事件特定参数传递到安全的按钮单击事件的最佳方法是什么?
更新
根据要求添加了示例。 (记住这只是理论上的)。
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 事件队列中,以允许在按下按钮和处理按下的单击事件之间更改按钮的状态?
假设您使用的是winform。
恕我直言,您可以使用
Tag
属性来传递控件特定参数,但您还必须记住 Windows 窗体控件不是线程安全的。要进行线程安全调用,必须使用 InvokeRequired
。以下链接提供了一个以线程安全方式为 TextBox 设置文本的示例,但对于 Tag
属性来说应该不会有很大不同。
http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx
希望这有帮助。