我正在与c#工作半年前,我正在学习。 我有一个帮助我工作的程序,它在我的工作场所与4种数据库进行通信。它的工作完美,但现在我想设计使它更酷,但当我想设置一个进度环时,我卡住了,因为我的方法在与我的数据库进行通信时冻结UI。 我想建立一个后台工作人员,我尝试了所有我发现甚至调用过的东西,但没有任何工作。如何让backgroundworker更新UI并为其设置(城域)进度?
public partial class MainWindow : MetroWindow
{
BackgroundWorker workerThread = null;
public MainWindow()
{
InitializeComponent();
InstantiateWorkerThread();
progressrinG.IsActive = true;
}
private void InstantiateWorkerThread()
{
workerThread = new BackgroundWorker();
workerThread.ProgressChanged += WorkerThread_ProgressChanged;
workerThread.DoWork += WorkerThread_DoWork;
workerThread.RunWorkerCompleted += WorkerThread_RunWorkerCompleted;
workerThread.WorkerReportsProgress = true;
//workerThread.WorkerSupportsCancellation = true;
}
private void WorkerThread_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
private void WorkerThread_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
private void WorkerThread_DoWork(object sender, DoWorkEventArgs e)
{
//My huge method,asking 4 database that would update UI too
//... Textboxes,Grids,Expanders.
}
private void Button3_Click(object sender, RoutedEventArgs e)
{
workerThread.RunWorkerAsync();
while (workerThread.IsBusy)
{
progressrinG.Visibility = Visibility.Visible;
}
}
}
即使调用,当我按下按钮,5-10秒后结束我的方法,但在做的,我不看我的progressring应用程序被冻结。
有关我该做什么错的任何想法?或者我该怎么办?提前致谢!
我试图找到一个示例现在如何做到这一点,然后我会尝试编辑我的方法。谢谢。 Upvoted。 – Tamas555