2013-04-14 5 views
0

문자열을 반환하는 DeSerializeXML이라는 deserialize 함수가 있습니다. 나는 그것이 그래서 나는 그것이 내가 그래서 수있는 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 폼의 텍스트 상자에 할당 하시겠습니까 ?? 불만을 토로하는 질문 인 경우 사과 드리며 필요한 경우 댓글/코드를 추가하겠습니다. Control.Invoke Method

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

을 사용하여 감사 모든

답변

1

는 : 메소드의 서명

+0

하하 와우. 고맙습니다. –

+0

너무 빨리 말했고, 정적 부분을 제거했을 때 예외가 생겼습니다. 그리고 "Invoke"메서드를 사용해도 그다지 올리지 못하고 인식되지 않습니다 (Windows Forms 프로젝트와 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에서 그것을 액세스 할 수 없다는 것을 이해할 수 없다. 그래서 나는 그것의 값을 어떻게 든 리턴해야만한다고 생각했다. –

관련 문제