2012-01-06 7 views
0

나는 C#을 사용하여 Windows 응용 프로그램에서 작업 중입니다. 나는에서이다른 양식에서 컨트롤의 텍스트 속성이나 속성을 변경하십시오.

내가 레이블이있는 X는, LABEL1은, 코드 클래스 X.cs에서이 x는 클래스가 FormManager.cs (사용자 정의 방법은

에 공통 기능을 제어 할 말을 상속

라고 말한다

양식로드 또는 양식 닫기의 모든 양식). 난 내가

이 FormManager.cs 클래스에서의 변화를 LABEL1의 레이블 텍스트를 변경하려면 위치를 FormManager.cs에 스레드가

일부 반복 작업과에서를 수행하기 위해 실행하고 있습니다. 어떻게해야합니까?

답변

1
  1. 귀하의 기본 클래스를 사용해야 할 수있는 다른 스레드에서 UI 객체를 업데이트하는 것을 잊지 마십시오, 그래서 당신은 기본 클래스에서 라벨을 업데이트 할 수 없습니다.
  2. 백그라운드 스레드를 실행하여 UI를 업데이트하는 경우 UI 스레드에서 UI 업데이트가 수행되도록 Invoke해야합니다.

FormManager 형태 :

public partial class FormManager : Form 
{ 
    public FormManager() 
    { 
     InitializeComponent(); 
    } 

    public Action BackgroundActionCompleted { get; set; } 

    public void OnBackgroundActionCompleted() 
    { 
     if (this.BackgroundActionCompleted != null) 
     { 
      // Invoke so the action will be launched on the UI thread 
      this.Invoke(this.BackgroundActionCompleted); 
     } 
    } 
} 

X 형태 :

public partial class X : FormManager 
{ 
    public X() 
    { 
     InitializeComponent(); 
    } 

    private void X_Load(object sender, EventArgs e) 
    { 
     this.BackgroundActionCompleted = delegate() { this.label2.Text = "New Text"; }; 
    } 
} 
여기 구현 예제
0

하위 클래스는 하위 속성을 볼 수 없습니다.
그러나 당신은 당신의 스레드에서 기본 클래스에

abstract void UpdateLabel(); 

전화를 사용하고 다음을 Label1 개체에 액세스 할 수 있습니다 파생 클래스에서이 메소드를 구현 할 수있다.
는 라벨 모르는 Invoke()

관련 문제