BackgroundWorker不适用于Perforce API

时间:2014-07-24 14:31:17

标签: c# backgroundworker p4api.net

我正在我的应用程序中实现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()中。

由于

1 个答案:

答案 0 :(得分:0)

你能让它在后台工作者之外的GUI线程上工作吗?如果是的话......

正在使用的命令,引用,是否位于GUI线程上?即使一个是reading信息,跨线程访问仍然是一个考虑因素。当使用后台工作程序时,我遇到了linq问题失败C# WPF: Linq Fails in BackgroundWorker DoWork Event,这看起来很相似。

<强>更新

您的运行工作程序异步调用在哪里?