坚持背景工人逻辑

时间:2011-05-06 15:35:54

标签: c# backgroundworker

我有点困惑。

我有一个后台工作程序,它在dowork方法中关闭并获取一个pdf文件(byte [])供我打开。当它完成后,在runworker完成的方法中,我创建了我的pdf显示对象并显示它。

但是,我想在dowork方法中检查此byte []是否为null,如果是,则转到新的数据库位置(需要一组新的方法调用来获取不同的pdf)

我实际上无法看到我如何做到这一点(除了在后台工作者中产生一个新的后台工作者 - 如果可能的话:))

这是我目前的代码设置,希望这可以说明我正在运行的问题

    byte[] pdf;
    void method_DoWork(object sender, DoWorkEventArgs e)
    {

        pdf = myObject.getPdf();

    }

    void method_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (pdf!= null)
        {
            displayPdf(pdf);
        }
        else
        {
            goAndGetAnotherPDF();
        }

    }

显然我可以在dowork方法中检查null。反正是在那里说

v

oid method_DoWork(object sender, DoWorkEventArgs e)
if(pdf != null)
{
    callRunWorkerCompleted()
}
else
{
    doSomeOtherStuffAndStoreInLocalVariables();
}

由于

2 个答案:

答案 0 :(得分:3)

好吧,DoWork方法已经在后台线程中运行了。你为什么不继续在那里做所有的工作?当DoWork方法完成时,无论如何,都将触发回调。

void method_DoWork(object sender, DoWorkEventArgs e)
{
    pdf = myObject.getPdf();

    if (pdf == null)
    {
        pdf = SomeOtherGetMethod();
    }
}

我认为没有必要为第一个返回为null的情况启动另一个线程。如果第一次失败,只需调用第二次获取方法。

答案 1 :(得分:0)

您是否可以检查DoWork线程中的PDF是否为空,如果是,则切换数据库并再次加载pdf?

void method_DoWork(object sender, DoWorkEventArgs e)
    {
       pdf = myObject.getPdf();
       if(pdf == null)
       {
         //Switch database or whatever and call again
         pdf = myObject.getPdf();
       }
    }