以下是代码:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
int count = 0;
// some code
count++;
logOutput.Text += Environment.NewLine + count; //here's the problem
}
正如标题所说,我想在每次触发OnTimedEvent时更新文本框,但我对C#很新,而Google只给了我复杂的代码。
问题:"非静态字段,方法或属性需要对象引用。"
答案 0 :(得分:2)
Timers.Timer
在辅助线程上引发其Elapsed
事件。您无法安全地对用户界面进行任何更改,例如在UI线程以外的任何地方设置Text
的{{1}}。如果您将表单本身分配给TextBox
的{{1}}属性,那么它将在UI线程上引发事件,您可以安全地访问您的控件,否则您必须以某种方式委托回到UI线程。
那就是说,为什么不使用SynchronizingObject
,它会在Ui线程上引发它的Timer
事件?