我正在我的应用程序中实现 Perforce API。对于几个长流程,我正在尝试实现 backgroudworker。我之前做过很多次的实现,我知道BGW的来龙去脉,但这次我只是无法得到结果。
public P4()
{
bw.WorkerReportsProgress = true;
bw.WorkerSupportsCancellation = true;
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.ProgressChanged += new ProgressChangedEventHandler(bw_ProgressChanged);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
Recordset = p4.Run(p4command, p4args);
}
P4 是我初始化 BGW 的构造函数。我通常通过 RunWorkerAsync() 方法调用它。bw_DoWork 假设运行 p4.Run() 但我的 Recordset 为空(意味着命令未运行)。关于 p4command,它是一个包含命令的全局字符串,例如“integrate”,而 p4args 是一个包含命令参数的全局数组,两者都是从基本函数初始化的。
知道我缺少什么吗?(我也有 bw_RunWorkerCompleted() 在 bw_DoWork 跳过 p4.run 后完美运行)
谢谢
编辑: 与 BGW 相关的所有功能都在一个单独的类 P4 中,它与任何 GUI 操作无关。我从一个 GUI 调用 P4.integrate() ,它又调用 BGW。当我将 P4.run() 直接放入 P4.integrate() 时,我会在 Recordset 中得到结果,但是将相同的命令放入 bw_DoWork() 似乎不起作用。
异步调用在 P4 类中,在 P4.integrate() 中。
谢谢