我有点困惑。
我有一个后台工作程序,它在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();
}
由于
答案 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();
}
}