2013-04-14 24 views
0

我有一个称为DeSerializeXML的反序列化函数,它返回一个字符串。我从一个不同的类,我需要它来运行基于一个定时器,所以我有它被称为在ElapsedEvent的定时器如何从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表单上的文本框?如果这是一个措辞不佳的问题,我很抱歉,我会根据需要添加评论/更多代码。感谢所有

回答

1

使用Control.Invoke Method

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

注意:从方法的签名

+0

haha​​h哇。谢谢。 –

+0

我说得太快了,当我删除静态部分时,我收到了一个异常。当我尝试使用“Invoke”方法它没有出现,并且不被识别(我正在使用Windows窗体项目vs 2012) –

+0

什么是异常? –

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; 
+0

表单上的文本框超出了范围,因此我只能从frm_Load访问它,当我尝试输入ElapsedEvent时,什么都没有出现 –

+0

文本框在哪里?在另一种形式或什么? – TheVillageIdiot

+0

它在MyForm上,我不明白为什么我不能从ElapsedEvent访问它,所以我想我必须以某种方式返回它的值 –