我正在我的应用程序中实现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为null(表示命令未运行)。关于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()中。
由于
答案 0 :(得分:0)
你能让它在后台工作者之外的GUI线程上工作吗?如果是的话......
正在使用的命令,引用,是否位于GUI线程上?即使一个是reading
信息,跨线程访问仍然是一个考虑因素。当使用后台工作程序时,我遇到了linq问题失败C# WPF: Linq Fails in BackgroundWorker DoWork Event,这看起来很相似。
<强>更新强>
您的运行工作程序异步调用在哪里?