0

我有一个名为反序列化的函数DeSerializeXML,它返回一个字符串。我从另一个类调用它我需要它基于 Timer 运行所以我在 Timer 中调用ElapsedEvent

    private void frm_MyForm_Load(object sender, EventArgs e)
    {
        System.Timers.Timer myTimer = new Timer(2000);
        myTimer.Elapsed += new ElapsedEventHandler(ElapsedEvent);
        myTimer.Enabled = true;            
    }

    public static void ElapsedEvent(object source, ElapsedEventArgs e)
    {
        string x = OtherClass.DeSerializeXML();
    }

如何从 ElapsedEvent 中提取该字符串值,以便将其分配给 MyForm 表单上的文本框?如果这是一个措辞不当的问题,我深表歉意,我会根据需要添加评论/更多代码。谢谢大家

4

2 回答 2

1

尝试将返回的字符串设置为Text文本框的属性。

textBox1.Text = OtherClass.DeSerializeXML();

如果您对非 UI 线程有任何疑虑,请尝试使用Invoke. 像这样:

var txt = OtherClass.DeSerializeXML();
if (InvokeRequired)
{
    //this is the Form
    this.Invoke(new Action<string>(textBox1), new object[] {txt});
    return;
}
textBox1.Text = txt;
于 2013-04-14T23:31:07.203 回答
1

使用Control.Invoke 方法

public void ElapsedEvent(object source, ElapsedEventArgs e)
{
    string x = OtherClass.DeSerializeXML();
    frm.Invoke((Action)(() => textBox.Text = x);
}

注意:从方法的签名中删除static关键字

于 2013-04-14T23:29:03.870 回答