누구나 Dispatcher
에서 값을 반환하는 방법을 알고 있습니다. Invoke
: wpf? ComboBox에 대해 선택한 색인을 반환하고 싶습니다.Dispatcher.Invoke를 사용하여 값을 반환하는 방법?
감사합니다.
누구나 Dispatcher
에서 값을 반환하는 방법을 알고 있습니다. Invoke
: wpf? ComboBox에 대해 선택한 색인을 반환하고 싶습니다.Dispatcher.Invoke를 사용하여 값을 반환하는 방법?
감사합니다.
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()는 실제로 호출 한 대리자의 반환 값을 반환하므로 적절하게 대리인을 변경하십시오.
반환 값
유형 : 대리인이 더 리턴 값이없는 경우 호출되는 위임 또는 널 (null)의 반환 값 을하는 System.Object.
이 콤보 상자에 선택된 값을 검색하는 나의 방법은 내가 대표가 값을 반환 말할 수있는 방법인가?
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;
}
}
나는 이것을 해결했다.
object oIsLoaded = container.Dispatcher.Invoke(new Func<bool> (() =>
{
return container.IsLoaded;
})
);
그리고 그런데
, 기회는 초기 점이다 : 호출 (에서 값을 반환하는 또 다른 방법)있다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();
:이 솔루션은 다음과 같이 원하는 형식을 반환하는 사용자 정의 대리자를 만드는 것입니다 위임자와 함께 작동하는 코드는 oIsLoaded
을 전혀 수정하지 않습니다. 그래서 그 종류의 함수에서 값을 반환하기 위해 Func<>
을 사용하고 싶습니다.
위 코드 스 니펫 코드를 게시하면 위임자가 콤보 상자에 대해 선택된 값을 반환 할 수 있도록이 코드를 어떻게 수정할 수 있습니까? 감사합니다 – toni
액션은 반환 값을 허용하지 않습니다.이 경우 @Will – Chris
과 같은 솔루션을 사용해야합니다. 솔루션은 ComboBox WPF 컨트롤에서 작동하지 않습니다. 오류가 발생했습니다. – toni