2012-08-28 3 views
0

프로세스가 UI가 응답하지 않는 것처럼 긴 프로세스를 백그라운드 프로세스로 실행하고 있습니다.백그라운드 프로세스를 사용할 때 마우스 커서가 원하는대로 표시되지 않습니다.

이제는 프로세스가 백그라운드 프로세스로 실행되는 동안 대기 커서를 표시하려고합니다. Dispatcher를 사용하여 커서를 업데이트하려고했지만 작동하지 않습니다.

private void btnStartAsyncOperation_Click(object sender, EventArgs e) 
{ 
    backgroundworkerprocess.RunWorkerAsync(); 
} 

backgroundworkerprocess 이벤트에서 :

내 처리는 버튼 클릭에서 실행

void backgroundworkerprocess_DoWork(object sender, DoWorkEventArgs e) 
{ 
    this.dispatcher.invoke(DispatcherPriority.Background, 
     new action((delegate) { 
      this.cursor = cursors.wait 
     }) 
    ); 
} 

나는이 대기 커서가 폼의 아무 곳이나 표시 될 수 있었으면 좋겠습니다 만, 그것은 단지입니다 마우스가 버튼 위에있을 때 표시됩니다.

+0

유효한 C#이 아닙니다. 세미콜론이 누락되어 대문자가 잘못되었습니다. 실제 * 코드가 무엇입니까? – Ryan

+0

글쎄, 커서를 설정하고 있지 않습니다. BackgroundWorker를 시작하면 커서가 자동으로 변경되지 않습니다. 백그라운드 작업을 시작할 때 Button의 Cursor 속성을 WaitCursor로 변경 한 다음 이벤트가 발생하여 작업자가 완료되었음을 알리면 커서를 다시 변경해야합니다. – KeithS

+0

이 코드는 어떤 클래스에 있습니까? '이 '란 무엇입니까? – cadrell0

답변

0
private void btnStartAsyncOperation_Click(object sender, EventArgs e) 
{ 
    this.Cursor = Cursors.WaitCursor; 
    backgroundworkerprocess.RunWorkerAsync(); 
} 

void backgroundworkerprocess_DoWork(object sender, DoWorkEventArgs e) 
{ 
    // do work 
} 

다음 단순히 커서를 RunWorkerCompleted 이벤트로 다시 변경하십시오.

+0

안녕 CollMinE, 크리스 내 문제에 대한 솔루션을 제공했습니다. 그래서이 코드를 사용하는 대신. this.dispatcher.invoke (DispatcherPriority.Background, ) 새 작업 ((대리자) { this.cursor = cursors.wait; }) ); 이 this.dispatcher.invoke (DispatcherPriority.Background, 새 작업 ((위임) { Window.GetWindow (이). 커서 = 커서}) )를 작성해야합니다; – Sunny

0

나는 사람들이 너를 이해한다고 생각한다.

Dispatcher로 보내기 : Window.GetWindow (this) .Cursor = Cursors.WaitCursor;

+0

많은 크리스 감사합니다, 지금은 내가 원하는대로 작동합니다. 당신은 바로 사람들이 내 문제를 이해하지 못한다면, 내가 더 정교하고 명확하게 될 것입니다 (만약 내가 어떤 문제가있어) – Sunny

관련 문제