2013-07-28 4 views
2

크로스 스레드 작업을 수행하려면, 나는 다음과 같은 사용
this.Invoke(new MethodInvoker(() => myMethod());다른 스레드에서 bool을 얻으려면 어떻게해야합니까?

을하지만, 내가 할 수없는, 예를 들어, 다음

this.Invoke(new MethodInvoker(() => bool myBool = getBool()); 
return myBool; 

어떻게 이런 짓을 했을까

? 나는 bool을 할 수 없다. myBool = getBool();
크로스 스레딩 작업 오류가 발생했습니다.

미리 감사드립니다.

+0

하는 작업을 사용하는 것을 고려 자신의 스레드를 관리하는 것보다는 비동기 적으로 처리 할 수 ​​있습니다. 작업 기반 비동기를 사용하면 작업의 가치를 단순히 '기다리고'있습니다. 'Task '은 bool 값을 되돌려주고 문맥에 맞는 쓰래드에서 실행을 다시 시작합니다. –

답변

4

이를 시도 할 경우이

bool myBool = false; 
this.Invoke(new MethodInvoker(() => myBool = getBool())); 
return myBool; 

같은 뭔가를 할 수 :

delegate T MyDelegate<out T>(); 
public bool MethodName() 
{ 
    bool b = (bool)this.Invoke(new MyDelegate<bool>(() => getBool())); 
    return b; 
} 
+0

메소드 이름만으로 이것을 호출할까요? – Adam

+0

@Adam : 정확히 무슨 뜻입니까? 이제 막 부울을 얻기 위해'MethodName()'을 호출 할 수 있지만'MethodName'을 원하는 이름으로 바꿀 수 있습니다. – ProgramFOX

+0

아. 그래, 그게 효과가있어! 고마워요! – Adam

1

확실하지 당신이 무슨 뜻인지

그러나 오전 잘못 pls는 저를 명확

+0

사실, if 문에서 사용하고 싶습니다. 'if (this.Invoke (new MethodInvoker()) =>! myBool)) {'...하지만 작동하지 않습니다 – Adam