2010-03-19 4 views
0

배경 : : StatusStrip이 TooStripStatusLabel로 사용되도록 설정된 WindowForms v3.5 응용 프로그램이 있습니다. 나는 그것이 실행중인 작업 동안 그것에 많은 업데이트를 발행하지만, 그것이 공백 인 주목할만한 기간이있다. 상태 표시 줄 레이블에 공백을 쓸 때도 아무런 의미가 없습니다.Winforms StatusStrip - 업데이트 할 때 비어있는 기간이있는 이유는 무엇입니까?

QUESTION : 상태 표시 줄 레이블이 비어있는 기간을 예상하는 이유는 무엇입니까?

나는 그것을 업데이트 방법 :

private void UpdateStatusStrip(string text) 
    { 

     toolStripStatusLabel1.Text = text; 
     toolStripStatusLabel1.Invalidate(); 
     this.Update(); 
    } 

PS합니다. this.Update() 후에 Application.DoEvents()를 호출하면 도움이되지 않는 것 같습니다. 사실은 그래서, BackgroundWorker 구성 제어를 통해이 호출 오전 :

(A) 나는 백그라운드 작업자를 시작 :

private void Sync_Button_Click(object sender, EventArgs e) 
    { 
     backgroundWorker1.RunWorkerAsync(); 
     DisableUpdateButtons(); 
    } 

(b)는 백그라운드 작업자가 업데이트 호출

private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) 
{ 
    backgroundWorker1.ReportProgress(1, "Example string"); 
    MainForm.MyC.SyncFiles(sender); 
} 

을 (c) MyC 비즈니스 클래스도이를 사용합니다.

public void SyncFiles(object sender) 
{ 
    BackgroundWorker bgw = (System.ComponentModel.BackgroundWorker) sender; 
    bgw.ReportProgress(1, "Starting sync..."); 
. 
. 
. 
} 

(d)는이 이벤트는 그것을 집어 들고 : 다시

private void backgroundWorker1_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e) 
    { 
     UpdateStatusStrip((string)e.UserState); 
    } 

(예) 그리고 업데이트 상태 스트립

private void UpdateStatusStrip(string text) 
{ 
    toolStripStatusLabel1.Text = text; 
    toolStripStatusLabel1.Invalidate(); 
    this.Update(); 
} 

이 도움을합니까를?

+1

나는 비슷한 것을 가지고있다. 텍스트가 라벨에 비해 너무 길 때 라벨이 비어있는 것처럼 보입니다. 아직 해결 방법이 확실하지 않습니다. –

답변

1

이유는이 함수의 호출자에있을 가능성이 있습니다. 다른 스레드에서 호출하는 경우에는 직접 호출 대신 Control.BeginInvoke를 사용하십시오. 긴 처리 동안 주 응용 프로그램 스레드에서 호출하는 경우 UpdateStatusStrip 호출 후에 Application.DoEvents를 시도하십시오.

+0

감사합니다 - 나는 그것을 사용하는 방법에 대해 좀 더 명확하게 추가했습니다 - "Control.BeginInvoke"가 필요합니까? 그렇다면 어디에서 이것을 넣을 것입니까? 그러나 UpdateStatusStrip 호출 후 "Application.DoEvents"시도했는데 도움이되지 않았다. – Greg

관련 문제