从System.Timers.Timer已过去的事件处理程序更新文本框

时间:2014-07-30 01:06:35

标签: c# winforms textbox

以下是代码:

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只给了我复杂的代码。

问题:"非静态字段,方法或属性需要对象引用。"

1 个答案:

答案 0 :(得分:2)

Timers.Timer在辅助线程上引发其Elapsed事件。您无法安全地对用户界面进行任何更改,例如在UI线程以外的任何地方设置Text的{​​{1}}。如果您将表单本身分配给TextBox的{​​{1}}属性,那么它将在UI线程上引发事件,您可以安全地访问您的控件,否则您必须以某种方式委托回到UI线程。

那就是说,为什么不使用SynchronizingObject,它会在Ui线程上引发它的Timer事件?