WPF Dispatcher Invoke返回值始终为null

时间:2009-09-08 13:26:04

标签: c# wpf backgroundworker dispatcher

我调用了一个方法,该方法返回UIElement,我使用Dispatcher调用,下面是代码。

但是Dispatcher调用的返回值总是NULL,有什么想法吗?

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;
}

3 个答案:

答案 0 :(得分:7)

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

请改为尝试:

UIElement retVal = slide.Dispatcher.Invoke(new Func<UIElement>( () => imageService.GenerateProxyImage(slide))); 

答案 1 :(得分:7)

噢,哦,这是你要做的事情:

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

编辑: ThreadStart让我失望 - 这不是多线程的。你想用这个代码示例做什么?

答案 2 :(得分:1)

Dispatcher.Invoke ThreadStart表示返回值为“被调用的委托的返回值,或者如果委托没有返回值,则为空引用(在Visual Basic中为Nothing)”。由于您使用的Func<T>委托无效,因此您需要使用{{1}}或带有返回值的自定义委托。