2012-08-28 18 views
0

由於進程使得用戶界面無法響應,因此我正在運行一個漫長的進程作爲後臺進程。當使用後臺進程時鼠標光標未按需要顯示

現在的問題是,當進程作爲後臺進程運行時,我想顯示一個等待遊標。我嘗試使用調度程序來更新遊標,但它不起作用。

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, new action((delegate){this.cursor = cursors.wait; }) );我必須寫這個this.dispatcher.invoke(DispatcherPriority.Background, 新動作((委託){ Window.GetWindow(this).Cursor = cursors.wait }) ); – Sunny

0

我不認爲人們瞭解你。

試試這個,發送給Dispatcher: Window.GetWindow(this).Cursor = Cursors.WaitCursor;

+0

很多感謝克里斯,它現在正在按照我的意願工作。你是對的人不理解我的問題,將來我會更加詳細和清楚(如果我有一些問題) – Sunny

相關問題