只是尝试学习Invoke/BeginInvoke,我遇到了那个问题。
// Update UI
public void UpdateForm(string value) {
txtLog.AppendText(value + "\r\n");
}
// Thread function
private void readSocket() {
string row = "";
while (socket.Connected) {
row = socket.readLine();
if (IsControlValid(this))
BeginInvoke((MethodInvoker)delegate { UpdateForm(String.Copy(row)); });
}
}
使用Invoke方法我的 UI 更新为正确的文本,而不是如果我使用BegineInvoke我看到错误的文本,即一些文本重复了很多时间。我知道那个电话
BeginInvoke((MethodInvoker)delegate { UpdateForm(row); });
也许“行”可以是共享变量的行为,而不是
BeginInvoke((MethodInvoker)delegate { UpdateForm(String.Copy(row)); });
我认为每个 BeginInvoke 调用都会创建一个“新”委托,因此使用 String.Copy 必须创建另一个字符串实例,但我总是看到错误的值(重复,ecc)。
我哪里错了?