我需要更新仍在办公室三个月时执行的程序。而且我发现代码不干净而且不容易修改。
我所做的是在后台工作程序中调用了每种方法。而且我为可能一次执行的每个任务创建了多个背景工作人员。
因此,我正计划使代码更整洁,更易于维护。
我创建了一个类并继承了BackgroundWorker,如下代码所示
public class Bgw : BackgroundWorker
{
BackgroundWorker worker;
public int ProcessId { get; set; }
public object[] ProcessData { get; set; }
public Bgw(int i, object[] obj)
{
ProcessId = i;
ProcessData = obj;
worker = new BackgroundWorker();
worker.DoWork += Worker_DoWork;
worker.WorkerSupportsCancellation = true;
worker.WorkerReportsProgress = true;
worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
worker.ProgressChanged += Worker_ProgressChanged;
worker.RunWorkerAsync();
}
public void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
public void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
}
public void Worker_DoWork(object sender, DoWorkEventArgs e)
{
if (ProcessId == 1)
{
//executed my code here
}
}
}
但是使用上面的代码。如果我像这样调用类,该如何通知控件中的更改
var obj = new object[3];
obj[0] = 1;
obj[1] = PdfPath;
obj[2] = EpubPath;
var work = new Bgw(1, obj);
或者有更好的方法吗?我知道我需要使用ProgressChanged。但是我如何从我上课的那地方得到改变呢?
谢谢
编辑:如果我要使用异步并像这样等待
class Program
{
public async static void TestAsyncAwaitMethods()
{
await Task.Run(() =>
{
for (var i = 0; i <= 5000000; i++)
{
UpdateUI(i);
}
});
}
private static void UpdateUI(int i)
{
Console.WriteLine("Update the UI: " + i);
}
}
并调用方法TestAsyncAwaitMethods()
如何更新我的GUI。当该方法位于不同的类中并且我要更新的属性位于另一个类中时(我正在使用mvvm模式)。