2009-04-02 3 views
0

가격이 변경 될 때마다 이벤트를 호출하는 금융 라이브러리 (com)가 있습니다. 이 이벤트를 구독하고 텍스트 상자를 업데이트하려고 시도하지만 항상 스레드 간 작업이 발생합니다. 좋아요, 저는 대의원을 사용합니다,하지만 전혀 작동하지 않습니다 ... 응용 프로그램을 정지 시켰습니다. GUI를 새로 고칠 때까지 이벤트가 빨리 호출된다는 가설입니다. 어떻게 내가 그걸 감당할 수 있을지 생각해?이벤트 (com 라이브러리) - GUI 업데이트

이 그 넣어 내가 지금 그것을 해결하는 유일한 방법 :

CheckForIllegalCrossThreadCalls = false; 

하지만 난 그게 아주 나쁜 습관이다 알을 ...

내가 C#을 함께 닷넷 3.5를 사용

편집 : 위임 코드

private delegate void UpdateTextBoxDelegate(String value); 

private void UpdateTextBox(String value) 
{ 
    this.txtPrice.Text = value; 
} 

txtPrice.Invoke(new UpdateTextBoxDelegate(UpdateTextBox), price); 

답변

0

이벤트를 사용하는 경우 UI thr로 마샬링해야합니다. 자동으로 ead. 그것이 BackgroundWorker의 작동 방식입니다. 이벤트 및 이벤트 콜백 자체에 어떻게 연결해야하는지 게시해야합니다.

InvokeRequired == true 일 때 Invoke을 사용해 볼 수도 있습니다.

using System.ComponentModel; 
public static class ISynchronizeInvokeExtensions 
{ 
    public static void InvokeEx<T>(this T @this, Action<T> action) where T : ISynchronizeInvoke 
    { 
    if (@this.InvokeRequired) 
    { 
     @this.Invoke(action, new object[] { @this }); 
    } 
    else 
    { 
     action(@this); 
    } 
    } 
} 

그래서 지금 당신은 어떤 ISynchronizeInvoke에 InvokeEx를 사용하여 속성과 클래스를 구현의 필드에 액세스 할 수 있습니다.

this.InvokeEx(f => f.txtPrice.Text = price);