Застрял с фоновой рабочей логикой - PullRequest
1 голос
/ 06 мая 2011

Я немного растерялся.

У меня есть фоновый рабочий, который в своем методе dowork отключается и получает pdf-файл (byte []), который я могу открыть. когда это будет сделано, в методе выполнения runworker я создаю свой экранный объект в формате pdf и отображаю его.

Тем не менее, я хочу проверить, является ли этот байт [] нулевым в методе dowork, и, если это так, перейти в новое местоположение в базе данных (что требует нового набора вызовов методов, чтобы получить другой 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. Есть ли оттуда поговорка

v

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

Спасибо

Ответы [ 2 ]

3 голосов
/ 06 мая 2011

Ну, метод DoWork уже запущен в фоновом потоке. Почему бы вам просто не продолжить и не выполнить всю работу там? Когда метод DoWork завершается, независимо от того, как, обратный вызов сработает.

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

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

Я не вижу необходимости запускать другой поток только для случая, когда первый возврат равен нулю. Просто вызовите второй метод извлечения, если первый не удался.

0 голосов
/ 06 мая 2011

Можете ли вы просто проверить, является ли PDF нулевым в потоке DoWork, и, если это так, переключить базы данных и снова загрузить pdf?

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