2011-06-23 34 views
0

與獲取數據凍結我使用C#。我在這裏得到更多的數據從MySQL databse.I'm使用這一個ODBC 3.51 connector.when數據加載凍結我的應用程序創建WPF應用程序。 我試圖解決這個問題使用線程。但我無法做到這一點使用線程。請建議的方式對解決我的問題......WPF形式從數據庫

回答

2

使用BackgroundWorker -class。它的使用非常簡單,常常用於加載數據等任務。下面的例子演示了它的用法:

BackgroundWorker bgWorker = new BackgroundWorker() { WorkerReportsProgress=true}; 
bgWorker.DoWork += (s, e) => {  
    // Load here your data  
    // Use bgWorker.ReportProgress(); to report the current progress 
}; 
bgWorker.ProgressChanged+=(s,e)=>{  
    // Here you will be informed about progress and here it is save to change/show progress. 
    // You can access from here savely a ProgressBars or another control. 
}; 
bgWorker.RunWorkerCompleted += (s, e) => {  
// Here you will be informed if the job is done. 
// Use this event to unlock your gui 
}; 
bgWorker.RunWorkerAsync(); 

使用BackgroundWorker的允許的UI線程繼續它的處理,因此加載過程中應用程序響應休息。但正因爲如此,您還必須確保不會發生依賴加載數據的操作。一個非常簡單的解決方案是將主UI元素IsEnabled-property設置爲false,並在RunWorkerCompleted中將其設置爲true。有了一點幻想,你可以改善這種愚蠢的行爲,並提供一個很好的UI體驗(取決於應用程序)。

這是一般好的建議做一個單獨的線程(BackgroundWorker的)很長一段時間的操作。有一點需要注意:不要在DoWork事件中創建WPF元素。這不會做,因爲所有派生類型的DependencyObject必須在它們使用的同一個線程中創建。

還有其他的解決方案,要做到這一點,例如直接創建一個線程或基於事件的異步模式,但是我建議使用的BackgroundWorker你的任務,因爲它HANDELS爲您的管道。最後,結果是一樣的,但它的方式要容易得多。

+0

感謝lot.I將嘗試添加背景工人在我的應用程序。 – hmlasnk

+0

@Hemal:如果這個答案幫助你,請點擊下面的投票按鈕,複選標記,以紀念這個答案爲接受的答案。 – HCL

+0

此評論是成績。再次感謝。 – hmlasnk