C# WPF Dispatcher Invoke返回值始终为null

C# WPF Dispatcher Invoke返回值始终为null,c#,wpf,backgroundworker,dispatcher,C#,Wpf,Backgroundworker,Dispatcher,我调用了一个方法,该方法返回我使用调度程序调用的UIElement,下面是代码 但是调度程序调用的返回值总是空的,有什么想法吗 void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { var slides = (IList<UIElement>)e.Argument; var bmpSlides = new List<UIElement>(); var imageServic

我调用了一个方法,该方法返回我使用
调度程序调用的
UIElement
,下面是代码

但是
调度程序
调用的返回值总是空的,有什么想法吗

void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    var slides = (IList<UIElement>)e.Argument;
    var bmpSlides = new List<UIElement>();
    var imageService = new ImageService();
    int count = 0;

    foreach (UIElement slide in slides)
    {
        object retVal = slide.Dispatcher.Invoke(
            new ThreadStart(() => imageService.GenerateProxyImage(slide)));
        bmpSlides.Add(imageService.GenerateProxyImage(slide));
        _backgroundWorker.ReportProgress(count / 100 * slides.Count);
        count++;
    }

    e.Result = bmpSlides;
}
void backgroundWorker\u DoWork(对象发送方,DoWorkEventArgs e)
{
var slides=(IList)e.参数;
var bmpSlides=新列表();
var imageService=新的imageService();
整数计数=0;
foreach(UIElement幻灯片中的幻灯片)
{
object retVal=slide.Dispatcher.Invoke(
新的ThreadStart(()=>imageService.GenerateProxy映像(幻灯片));
添加(imageService.GenerateProxy图像(幻灯片));
_backgroundWorker.ReportProgress(计数/100*slides.count);
计数++;
}
e、 结果=BMP滑块;
}

这是因为
ThreadStart
没有返回类型(
void()

请尝试以下方法:

UIElement retVal = slide.Dispatcher.Invoke(new Func<UIElement>( () => imageService.GenerateProxyImage(slide))); 
UIElement retVal=slide.Dispatcher.Invoke(新函数(()=>imageService.GenerateProxy映像(幻灯片));

for
Dispatcher.Invoke
声明返回值为“被调用的委托的返回值,或者如果委托没有返回值,则返回空引用(在Visual Basic中没有)。因为您使用的
ThreadStart
委托是无效的,您需要使用带有返回值的
Func
或自定义委托。

D'oh,下面是如何执行您尝试执行的操作:

object retVal;
slide.Dispatcher.Invoke(new Action(() => retval = imageService.GenerateProxyImage(slide)));

编辑:ThreadStart将我抛出-这不是多线程的。你想用这个代码示例实现什么?

这会起作用,但在我看来,像其他答案中所描述的那样使用Func更干净。实际上,Dispatcher.Invoke会等待线程完成,Dispatcher.BeginInvoke不会。。。