나는 스레드 안전하다고 생각되는이 작은 메소드를 가졌습니다. 모든 것은 내가 void가 아닌 반환 값을 갖기를 원할 때까지 작동합니다. BeginInvoke가 호출 될 때 어떻게 반환 값을 얻습니까?BeginInvoke/Invoke가 C#에서 호출 될 때 반환 값을 얻는 방법
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.BeginInvoke(new MethodInvoker(() => readControlText(varControl)));
} else {
string varText = varControl.Text;
return varText;
}
}
편집 : 내가 가진 같아요 BeginInvoke 스레드 계속하기 전에 내가 GUI에서 값을 필요로하는이 경우 nessecary되지 않습니다. 그래서 Invoke를 사용하는 것이 좋습니다. 다음 예제에서 값을 반환하는 데이를 사용하는 방법에 대한 단서가 없습니다.
private delegate string ControlTextRead(Control varControl);
public static string readControlText(Control varControl) {
if (varControl.InvokeRequired) {
varControl.Invoke(new ControlTextRead(readControlText), new object[] {varControl});
} else {
string varText = varControl.Text;
return varText;
}
}
하지만 그 중 하나 코드를 사용하여 값을 얻을하는 방법을 잘;)
"연속 통과 스타일"패턴이 필요하기 때문에 호출에서 반환 된 값으로 작업해야합니다. 'async','await' 및'Task'로 완화 될 수 있습니다. –