You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Task.Run实现加载DataGridView时显示进度条

WinForm加载DataGridView时进度条不显示最简解决方案

核心实现代码

// 给点击事件添加async修饰符
private async void btnLoad_click(object sender, EventArgs e)
{
    string filename = txtfile.Text;
    progressBar.Visible = true;
    progressBar.Style = ProgressBarStyle.Marquee;

    // 仅将无UI依赖的耗时数据加载逻辑放入后台线程
    DataTable dt = await Task.Run(() => GetDt(filename));           

    // await结束后自动回到UI线程,可直接操作控件
    datagridview1.DataSource = dt;           
    datagridview1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.DisplayedCells;     

    progressBar.Visible = false;
}

方案说明

  • 原问题根源:所有逻辑都在UI线程执行,UI线程被耗时操作占满无法重绘进度条,导致界面假死、进度条不显示;之前尝试的错误是把UI控件操作放入了后台线程,WinForm禁止非UI线程操作UI控件,因此抛出异常。
  • 该方案是改动最小的实现方式:仅用Task.Run包裹纯数据加载的非UI逻辑,await会默认捕获UI同步上下文,等待后台执行完成后自动切回UI线程执行后续代码,无需手动编写Invoke跨线程调度逻辑,完全匹配需求。

内容的提问来源于stack exchange,提问作者variable

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:48:01