C# UI界面的更新
需要在窗體上不停修改? 文本框的值。代碼如下
? ?for (int i = 0; i < 20; i++)? ?{
? ?lblCurrentIndex.Text = @"編號:" + i.ToString();
? ?Thread.Sleep(1000);
? ? }
可實際效果是:等全部執行完成后,才顯示“編號:19”。這是因為for循環運行在主線程中,而刷新界面使用的就是i主線程是。盡管修改文本框的值有效,但界面沒有刷新,等待for循環結束后,主線程才能刷新。
?
正確的做法:將耗時循環放在另一個線程中執行
?var t1 = new Task(() =>
? ? ? ? ? ? {
? ? ? ? ? ? ? ? for (int i = 0; i < 20; i++)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? _syncContext.Post(Ui, i);
? ? ? ? ? ? ? ? ? ? Thread.Sleep(1000);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? });
? t1.Start();
由于不能再另一個線程對UI進行修改,使用SynchronizationContext完成跨線程UI修改
private readonly SynchronizationContext _syncContext;
?public FormPointCheck()
? ? ? ? {
? ? ? ? ? ? InitializeComponent();
? ? ? ? ? ? _syncContext = SynchronizationContext.Current;
? ? ? ? }
? ?public void Ui(object i)
? ? ? ? {
? ? ? ? ? ? lblCurrentIndex.Text = @"當前點編號:" + i.ToString();
? ? ? ? }
?
總結
以上是生活随笔為你收集整理的C# UI界面的更新的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#-异步Ping检查网络通断
- 下一篇: 利用?和 ??简化界面的默认配置/自定义