26
A
回答
27
int result = -1;
// this is synchronous
myCombo.Invoke(() =>
{
result = myCombo.SelectedIndex;
});
return result;
这当然是一种笨重的。更好的设计是在您的VM中实现INotifyPropertyChanged,创建SelectedIndex属性并将组合框的SelectedIndex
属性绑定到它。 INPC绑定是线程不敏感的(3.5或4.0+,我不记得是哪个),所以你可以从虚拟机的不同线程读取和更新这些属性,而不用担心。
0
你不能直接这样做,但你可以这样做。
Dispatcher.Invoke()实际上会返回您调用的委托的返回值,因此请相应地更改您的委托。
返回值
类型:System被调用的委托或 空返回值 如果委托没有返回值 。
2
这是我的方法检索一个下拉框选择的值,我怎么能说代表的返回值?
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;
}
}
1
我解决了这个问题。该解决方案是创建一个返回所需的类型这样的自定义委托:
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();
24
有从调用(返回值的另一种方法):
object oIsLoaded = container.Dispatcher.Invoke(new Func<bool> (() =>
{
return container.IsLoaded;
})
);
顺便说一下,有机会,初始代码(与委托人一起工作)根本不会修改oIsLoaded
;所以我宁愿使用Func<>
来从这种函数中返回一个值。
相关问题
- 1. 在Dispatcher.invoke方法返回后
- 2. 如何使用__cyg_profile_func_exit获取返回值?
- 3. 如何使用UITableView返回值
- 4. 如何使用list.index返回布尔值?
- 5. 如何使用Selenium从JavaScript返回值?
- 6. 如何使用RxJava返回值?
- 7. 如何使用count()返回零值
- 8. 如何使用模板返回char值
- 9. 如何使用函数的返回值?
- 10. 如何使用返回值返回承诺
- 11. 使用打印返回值,如返回值
- 12. 使用sshj返回Shell返回值
- 13. 如何返回复杂的返回值?
- 14. 如何从exe中返回值并使用C#捕获返回的值#
- 15. 如何正确地返回的std :: string(或如何正确使用返回值)
- 16. 如何从使用gtk回调调用的函数返回值?
- 17. SQL使用返回值
- 18. 返回值,而使用CPROFILE
- 19. 返回值使用SqlCommand
- 20. 使用返回可能值
- 21. 使用按钮返回值
- 22. 使用Ajax.Request返回值
- 23. 如何使Durandal小部件返回值?
- 24. 如何返回使用PHP
- 25. WPF:如何调用Dispatcher.Invoke()同步?
- 26. 如果继续使用“不返回值”?
- 27. 如何使用jquery.ajax()使用json_encode时返回特定值?
- 28. 如何从GM_xmlhttprequest返回值?
- 29. 如何从GUI返回值?
- 30. 如何返回布尔值?
上面我发布我的代码片段,我怎么可以修改这个允许委托返回选择组合框的值?谢谢 – toni 2010-03-22 12:09:54
操作不允许返回值,在这种情况下,您将不得不使用像@Will – Chris 2010-03-22 12:13:35
这样的解决方案。解决方案在ComboBox WPF控件中不起作用。我收到一个错误。 – toni 2010-03-22 12:18:32