BackgroundWorker不能为Perforce API工作
本文关键字:API 工作 Perforce 不能 BackgroundWorker | 更新日期: 2023-09-27 18:14:41
我正在我的应用程序中实现Perforce API。对于几个漫长的过程,我正在尝试实现后台工作者。我以前做过很多次实现,我知道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 . integration(),反过来调用BGW。当我将4.run()直接放入4.integrate()中时,我在Recordset中得到了结果,但是将相同的命令放入bw_DoWork()中似乎不起作用。
异步调用在P4类中,在P4. integration()中。
谢谢
你能让它在后台worker之外的GUI线程上工作吗?如果是这样…
正在使用的命令,引用,位于GUI线程上吗?即使其中一个是reading
信息,跨线程访问仍然需要考虑。当使用后台工作器时,我遇到了一个linq问题失败c# WPF: linq在BackgroundWorker DoWork事件中失败,这看起来很相似。
哪里是你的运行工人异步调用?