Wpf 如何使用Dispatcher.Invoke返回值?
任何人都知道如何从中返回值。在里面我想返回所选的索引 谢谢Wpf 如何使用Dispatcher.Invoke返回值?,wpf,return,invoke,dispatcher,Wpf,Return,Invoke,Dispatcher,任何人都知道如何从中返回值。在里面我想返回所选的索引 谢谢 int result = -1; // this is synchronous myCombo.Invoke(() => { result = myCombo.SelectedIndex; }); return result; 当然,这有点笨重。更好的设计是在VM中实现INotifyPropertyChanged,创建SelectedIndex属性并将组合框的SelectedIndex属性绑定到它。INPC绑定是线程不
int result = -1;
// this is synchronous
myCombo.Invoke(() =>
{
result = myCombo.SelectedIndex;
});
return result;
当然,这有点笨重。更好的设计是在VM中实现INotifyPropertyChanged,创建SelectedIndex属性并将组合框的
SelectedIndex
属性绑定到它。INPC绑定是线程不敏感的(3.5或4.0+,我不记得是哪个),因此您可以从VM中的不同线程读取和更新这些属性,而不用担心。您不能直接执行此操作,但可以执行此操作
实际上,Dispatcher.Invoke()从调用的委托返回返回值,因此相应地修改委托
返回值
类型:System.Object返回值
从正在调用的委托或
如果委托没有返回值,则为null
价值观
这是我检索组合框所选值的方法,我如何才能说“委托返回值”
private object getValueCB(System.Windows.Controls.ComboBox cb)
{
object obj;
if (!cb.Dispatcher.CheckAccess())
{
obj = cb.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
obj = cb.SelectedValue;
}
));
return obj;
}
else
{
return obj = cb.SelectedValue;
}
}
我已经解决了这个问题。解决方案是创建一个自定义委托,该委托返回所需的类型,如下所示:
private object GetValueCB(System.Windows.Controls.ComboBox cb)
{
object obj = null;
if (!cb.Dispatcher.CheckAccess())
{
obj = cb.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
(MyDelegate)
delegate()
{
return (obj = cb.SelectedValue);
}
);
return obj;
}
else
{
return obj = cb.SelectedValue;
}
}
public delegate object MyDelegate();
还有一种方法可以从Invoke()返回值:
object=container.Dispatcher.Invoke(新函数(()=>
{
返回容器。已卸载;
})
);
顺便说一下,初始代码(与委托一起工作)根本不会修改
oisload
;因此,我更愿意使用a从该类函数返回值。在上面我发布了我的代码片段,如何修改它以允许委托为combobox返回所选值?thanksAction不允许返回值,在这种情况下,您必须使用类似于@WillWill solution的解决方案在ComboBox WPF控件中不起作用。我犯了一个错误。
object oIsLoaded = container.Dispatcher.Invoke( new Func<bool> ( () =>
{
return container.IsLoaded;
})
);