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()中。

谢谢

BackgroundWorker不能为Perforce API工作

你能让它在后台worker之外的GUI线程上工作吗?如果是这样…

正在使用的命令,引用,位于GUI线程上吗?即使其中一个是reading信息,跨线程访问仍然需要考虑。当使用后台工作器时,我遇到了一个linq问题失败c# WPF: linq在BackgroundWorker DoWork事件中失败,这看起来很相似。

哪里是你的运行工人异步调用?