Mysql wpf表单冻结与从数据库获取数据

Mysql wpf表单冻结与从数据库获取数据,mysql,c#-4.0,Mysql,C# 4.0,我使用c#创建了WPF应用程序。我必须从mysql数据库中获取更多数据。我使用ODBC 3.51连接器。数据加载时冻结我的应用程序。 我试图用线程来解决这个问题,但我不能用线程来解决这个问题。请建议解决我问题的方法 使用a级。它的用法非常简单,经常用于加载数据等任务。以下示例显示了它的用法: BackgroundWorker bgWorker = new BackgroundWorker() { WorkerReportsProgress=true}; bgWorker.DoWork +=

我使用c#创建了WPF应用程序。我必须从mysql数据库中获取更多数据。我使用ODBC 3.51连接器。数据加载时冻结我的应用程序。 我试图用线程来解决这个问题,但我不能用线程来解决这个问题。请建议解决我问题的方法

使用a级。它的用法非常简单,经常用于加载数据等任务。以下示例显示了它的用法:

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属性设置为false,并在RunWorkerCompleted中将其设置为true。只要有一点幻想,你就可以改善这种愚蠢的行为,并获得良好的用户界面体验(取决于应用程序)

一般来说,在单独的线程(BackgroundWorker)中执行长时间操作是一个很好的建议。有一个警告:不要在DoWork事件中创建WPF元素。这是不行的,因为DependencyObject的所有派生类型都必须在使用它们的同一线程中创建


还有其他解决方案可以做到这一点,例如直接创建线程或使用基于事件的异步模式,但我建议在任务中使用BackgroundWorker,因为它为您处理管道。最后,结果是一样的,但方法要简单得多。

非常感谢。我将尝试在我的应用程序中添加背景工作人员。@Hemal:如果这个答案对您有帮助,请单击投票按钮下的复选标记,将这个答案标记为已接受的答案。此评论为评分。再次感谢。