我正在使用以下代码来更改 UI 线程之外的标签上的文本。
标签上的文字不是我所期望的。我花了一些时间才意识到发生了什么。
string mystringvar = null;
mystringvar = "WHAT I WANT";
Application.Current.Dispatcher.Dispatch(() =>
{
mylabel.Text = mystringvar;
});
mystringvar = "WHAT I GOT";
// on the UI, the text on mylabel is WHAT I GOT
在再次使用 mystringvar 之前,是否有任何机制可以确定 UI 已更新?我没有进行过实验,但这也适用于标签的其他属性,这是有道理的。
您可以随时获取副本并确保副本永远不会被覆盖,例如
string mystringvar = null;
mystringvar = "WHAT I WANT";
{
string mystringvar2 = mystringvar;
Application.Current.Dispatcher.Dispatch(() =>
{
mylabel.Text = mystringvar2;
});
}
mystringvar = "WHAT I GOT";