我有這個應該是線程安全的小方法。一切工作,直到我想它有返回值而不是無效。如何在調用BeginInvoke時獲取返回值?如何在C#中調用BeginInvoke/Invoke時返回值
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'來緩解。 – 2016-09-23 01:44:15