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. 如何使用js eval來返回值?
- 3. 如何使用AlertDialog的返回值
- 4. 如何使用RxJava返回值?
- 5. 如何使用函數的返回值?
- 6. 如何使用UITableView返回值
- 7. 如何使用Selenium從JavaScript返回值?
- 8. 如何使用WCF的MessageContract返回值?
- 9. 如何使用模板返回char值
- 10. 如何使用__cyg_profile_func_exit獲取返回值?
- 11. 如何使用pandas.DataFrame.boxplot的返回值?
- 12. 如何使用list.index返回布爾值?
- 13. 如何使用count()返回零值
- 14. 如何使用返回值返回承諾
- 15. 使用打印返回值,如返回值
- 16. `({...})`如何返回值?
- 17. 使用sshj返回Shell返回值
- 18. 如何返回複雜的返回值?
- 19. Backgroundworker調用Dispatcher.Invoke
- 20. 如何正確地返回的std :: string(或如何正確使用返回值)
- 21. 如何從exe中返回值並使用C#捕獲返回的值#
- 22. 如何從使用gtk回調調用的函數返回值?
- 23. WPF:如何調用Dispatcher.Invoke()同步?
- 24. 如何返回使用PHP
- 25. 如何使Durandal小部件返回值?
- 26. 如何使ajax全局返回的值
- 27. 使用Moment.js返回值
- 28. 使用PowerMock與返回值
- 29. 使用按鈕返回值
- 30. 使用Ajax.Request返回值
上面我發佈我的代碼片段,我怎麼可以修改這個允許委託返回選擇組合框的值?謝謝 – toni 2010-03-22 12:09:54
操作不允許返回值,在這種情況下,您將不得不使用像@Will – Chris 2010-03-22 12:13:35
這樣的解決方案。解決方案在ComboBox WPF控件中不起作用。我收到一個錯誤。 – toni 2010-03-22 12:18:32