如何从ElapsedEvent方法返回一个字符串

时间:2013-04-14 23:18:21

标签: c#

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

    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表单上的文本框?如果这是一个措辞不好的问题,我会道歉,我会根据需要添加评论/更多代码。谢谢大家

2 个答案:

答案 0 :(得分:1)

使用Control.Invoke Method

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

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

答案 1 :(得分:1)

尝试将返回的字符串设置为text-box的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;