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

C#服务端导出Excel/PDF完成后如何自动关闭等待窗口

解决方案

你当前的代码逻辑顺序完全倒置:WaitWindow.Show()方法会阻塞主线程,直到传入的WorkerMethod执行完成后才会返回、关闭等待框。你之前把导出逻辑放在WaitWindow.Show()之后,所以只会先跑完1-100的假计数,关闭等待框后才开始实际导出,完全达不到预期效果。

步骤1:修改export_click方法

把导出需要的参数直接传入WaitWindow.Show(),不需要在外部执行导出逻辑:

protected void export_click(object sender, EventArgs e)
{
    string exportType = hidExportType.Value;
    string exportSections = hidSections.Value;
    string exportStudents = hidStudents.Value;

    // 传入导出参数,等待框会持续到WorkerMethod执行完成自动关闭
    WaitWindow.Show(this.WorkerMethod, "正在准备导出文件,请稍候...", exportType, exportSections, exportStudents);
}

步骤2:重写WorkerMethod方法

删除原有假计数逻辑,把实际导出逻辑移到这个方法内:

private void WorkerMethod(object sender, Jacksonsoft.WaitWindowEventArgs e)
{
    // 取出传入的三个导出参数
    string exportType = e.Arguments[0].ToString();
    string exportSections = e.Arguments[1].ToString();
    string exportStudents = e.Arguments[2].ToString();

    // 执行实际导出逻辑,执行完成后等待框会自动关闭
    switch (exportType)
    {
        case "csv":
            export_csv(exportSections, exportStudents);
            break;
        case "excel":
            export_excel(exportSections, exportStudents);
            break;
        case "pdf":
            export_pdf(exportSections, exportStudents);
            break;
        default:
            break;
    }

    // 可自定义返回结果,不需要可以删除
    e.Result = "导出完成";
}

可选优化:实时更新提示信息

如果你的导出逻辑可以拆分为多个步骤,可以在执行过程中更新等待框的提示文本,提升用户体验:

private void WorkerMethod(object sender, Jacksonsoft.WaitWindowEventArgs e)
{
    string exportType = e.Arguments[0].ToString();
    string exportSections = e.Arguments[1].ToString();
    string exportStudents = e.Arguments[2].ToString();

    e.Window.Message = "正在查询导出数据...";
    // 这里放你的数据查询逻辑
    
    e.Window.Message = $"正在生成{exportType}格式文件...";
    // 这里放你的文件生成逻辑

    e.Window.Message = "正在准备下载...";
    // 这里放文件输出逻辑
    
    e.Result = "导出完成";
}

注意事项

  1. 如果你是WinForm/WPF桌面项目,以上修改可以直接生效。如果导出逻辑中有操作UI控件的代码,需要用Invoke方法切回UI线程执行,避免跨线程操作报错。
  2. 如果你是ASP.NET Web项目,这个Jacksonsoft.WaitWindow是WinForm专属组件,不能在Web场景使用。Web端的等待提示需要用前端实现:点击导出按钮时用JS弹出全局遮罩提示,后端导出完成返回文件后再用JS关闭遮罩即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:48:03