2010-03-22 5 views

답변

27
int result = -1; 

// this is synchronous 
myCombo.Invoke(() => 
{ 
    result = myCombo.SelectedIndex; 
}); 

return result; 

이것은 물론 종류가 다릅니다. 더 나은 디자인은 VM에 INotifyPropertyChanged를 구현하고 SelectedIndex 속성을 만들고 콤보 상자의 SelectedIndex 속성을 바인딩하는 것입니다. INPC 바인드는 스레드를 구분하지 않으므로 (3.5 또는 4.0+ 중 어떤 것이 기억 나지 않음) 걱정없이 VM의 다른 스레드에서 이러한 속성을 읽고 업데이트 할 수 있습니다.

0

직접 할 수 없지만 이렇게 할 수 있습니다.

Dispatcher.Invoke()는 실제로 호출 한 대리자의 반환 값을 반환하므로 적절하게 대리인을 변경하십시오.

반환 값

유형 : 대리인이 더 리턴 값이없는 경우 호출되는 위임 또는 널 (null)의 반환 값 을하는 System.Object.

Source

+0

위 코드 스 니펫 코드를 게시하면 위임자가 콤보 상자에 대해 선택된 값을 반환 할 수 있도록이 코드를 어떻게 수정할 수 있습니까? 감사합니다 – toni

+0

액션은 반환 값을 허용하지 않습니다.이 경우 @Will – Chris

+0

과 같은 솔루션을 사용해야합니다. 솔루션은 ComboBox WPF 컨트롤에서 작동하지 않습니다. 오류가 발생했습니다. – toni

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

나는 이것을 해결했다.

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(); 
24

:이 솔루션은 다음과 같이 원하는 형식을 반환하는 사용자 정의 대리자를 만드는 것입니다 위임자와 함께 작동하는 코드는 oIsLoaded을 전혀 수정하지 않습니다. 그래서 그 종류의 함수에서 값을 반환하기 위해 Func<>을 사용하고 싶습니다.