2011-05-08 124 views
1

你好,我有以下問題。我需要像「鎖定」這樣的東西來讓我的程序等待一個事件。我有一些基於事件的數據庫訪問。所以,如果我想從數據庫的東西,做一些事情上我寫:等待事件。如何不凍結gui

void getData() 
{ 
    ... 
    ... 
    getMyDataFromDbPlease(); 
} 

void responseEvent(parameters...) 
{ 
    //Ok i have my data, now i do something on it 
    ... 
    ... 
} 

所以,如果我有大的邏輯,我必須把它分成兩個部分。如果我想在一個alghoritm中獲得5次數據,我必須將它分成6塊。

所以,我想是這樣的:

void getData() 
{ 
    ... 
    ... 
    getMyDataFromDbPlease(); 

    //somehow wait for data here 

    getMyDataFromDbPlease(); 
    ... 
    ... 
} 

但我想這種神奇的等待不是凍結我的GUI。我怎樣才能達到目的?我在wpf上工作。

回答

0

嘗試將代碼放在單獨的線程中。 但是不要忘記,您必須使用Dispatcher.Invoke()來訪問GUI。或者,您可以將GUI綁定到在單獨線程中更改的變量。

3

你可以使用一個後臺任務,您的電話連線到數據庫,然後派遣實際更新回到你的UI線程:

// create a background task to load data without blocking the UI 
Task.Factory.StartNew(() => 
{ 
    var data = getData(); // call to DB or whatever 

    // invoke user code on the main UI thread 
    Dispatcher.Invoke(new Action(() => 
    { 
    doSomethingWithData(); 
    })); 
}); 
+1

我認爲應該在這裏,如果你是從一個執行此這個類不是一個wpf組件,而你沒有一個Dispatcher對象來操作。相反,你可以使用像這樣的東西:'Application.Current.Dispatcher.Invoke(...'。 – Ben 2011-05-08 15:21:43