Web中带时间的进度条

一、本进度条带有时间,但是时间是模拟的,非程序执行的真正所花的时间。

效果如下:

图一:                                                                                                                 图二:

                           

图三:                                                                                                                              图四:

                                           

 

进度条代码:processbar.html

<html>
<head>
<title></title>
<script language="javascript">

//开始处理
function BeginTrans(msg)
{
    WriteText("Msg1",msg);
}

//设置进度条进度
function SetPorgressBar(msg, pos)
{
    ProgressBar.style.width= pos + "%";
    WriteText("Msg1",msg + " 已完成" + pos + "%");
}

//处理结束
function EndTrans(msg)
{
    if(msg=="")
        WriteText("Msg1","完成。");
    else
        WriteText("Msg1",msg);
}

//设置时间信息
function SetTimeInfo(msg)
{
    WriteText("Msg2",msg);
}

// 更新文本显示信息
function WriteText(id, str)
{
	var strTag = '<font face="Verdana, Arial, Helvetica" size="2" color="#ea9b02"><B>' + str + '</B></font>';	
	if (document.all) document.all[id].innerHTML = strTag;
}
</script>
</head>
<body>
<table align="center" style="height:100%">
    <tr style="height:45%"><td></td></tr>
    <tr>
        <td>
            <div id="Msg1" style="height:16px;"><font face="Verdana, Arial, Helvetica" size="2" color="#ea9b02"><b>正在加载...</b></font></div>
            <div id="ProgressBarSide" style="width:300px; color:Silver;border-width:1px; border-style:Solid;">
                <div id="ProgressBar" align="center" style="height:20px; width:0%; background-color:#316AC5;"></div>
            </div>
            <div id="Msg2" style="height:16px;"><font face="Verdana, Arial, Helvetica" size="2" color="#ea9b02"><b></b></font></div>
        </td>
    </tr>
    <tr style="height:50%"><td></td></tr>
</table>
</body>
</html>


后台调用代码:

protected void Button1_Click(object sender, EventArgs e)
    {
        DateTime startTime = System.DateTime.Now;
        DateTime endTime = System.DateTime.Now;

        // 根据 ProgressBar.htm 显示进度条界面
        string templateFileName = Path.Combine(Server.MapPath("."), "ProgressBar.htm");
        StreamReader reader = new StreamReader(@templateFileName, System.Text.Encoding.GetEncoding("gb2312"));
        string html = reader.ReadToEnd();
        reader.Close();
        Response.Write(html);
        Response.Flush();
        System.Threading.Thread.Sleep(1000);

        string jsBlock;
        // 处理完成
        jsBlock = "<script>BeginTrans('开始处理...');</script>";
        Response.Write(jsBlock);
        Response.Flush();

        System.Threading.Thread.Sleep(1000);

        //开始备份数据库
        SqlConnection sqlCon = new SqlConnection("Data Source=.;Initial Catalog=master;User ID=sa;PWD=sa;");
        string path = Server.MapPath("~\\DBBackup\\") + "Test.bak";
        string sqlBackup = string.Format("USE master;BACKUP DATABASE mytest TO DISK='{0}'", path);
        SqlCommand cmd = new SqlCommand(sqlBackup, sqlCon);

        try
        {
            if (System.IO.File.Exists(path))
            {
                throw new Exception("The file has existed.Please its name input again.");
            }
            sqlCon.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
        finally
        {
            cmd.Dispose();
            sqlCon.Close();
        }

        // 根据处理任务处理情况更新进度条
        for (int i = 1; i <= 100; i++)
        {
            System.Threading.Thread.Sleep(20);
            jsBlock = "<script>SetPorgressBar('" + "数据库备份" + i.ToString() + "','" + i.ToString() + "');</script>";
            Response.Write(jsBlock);
            Response.Flush();
        }

        // 处理完成
        jsBlock = "<script>EndTrans('数据库备份完毕。');</script>";
        Response.Write(jsBlock);
        Response.Flush();

        // 用时
        endTime = DateTime.Now;
        jsBlock = "<script>SetTimeInfo('用时" + GetTimeSpan(startTime, endTime) + "');</script>";
        Response.Write(jsBlock);
        Response.Flush();
    }

    protected string GetTimeSpan(DateTime startTime, DateTime endTime)
    {
        string timeSpan = string.Empty;
        TimeSpan ts = endTime - startTime;
        if (ts.Days > 0)
            timeSpan += ts.Days.ToString() + "天";
        if (ts.Hours > 0)
            timeSpan += ts.Hours.ToString() + "小时";
        if (ts.Minutes > 0)
            timeSpan += ts.Minutes.ToString() + "分钟";
        if (ts.Seconds > 0)
            timeSpan += ts.Seconds.ToString() + "秒";
        return timeSpan;
    }


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这是一个很有趣的问题,由于NET Core的动态进度条接口比较复杂,我建议采用以下思路:首先,实现一个进度条类,用来显示任务完成进度,然后在该类中定义一个接口,用来更新进度条状态,最后提供一个方法,用于显示进度条。 ### 回答2: netcore动态进度条接口的思路可以通过以下步骤实现: 1. 首先定义一个接口,例如`IProgressBar`,用于表示进度条的功能。在接口中可以定义一些必要的方法,例如设置进度条的最大值和当前值,获取当前进度,以及更新进度等操作。 2. 接着可以创建一个具体的进度条类,例如`ProgressBar`,实现接口`IProgressBar`中定义的方法。在类中可以使用`System.Console`类来实现控制台下的进度条效果,或者使用其他UI框架中的相应组件来实现可视化界面下的进度条效果。 3. 在`ProgressBar`类中可以定义一个定时器,每隔一定的时间间隔更新进度条的显示,可以通过计算当前进度与最大值的比例来显示进度条的长度或百分比。 4. 使用时,可以将进度条类实例化,并调用相应的方法来设置进度条的最大值和当前值,然后启动更新进度条的定时器即可。 示例代码如下: ```csharp using System; using System.Timers; public interface IProgressBar { void SetMaxValue(int maxValue); void SetCurrentValue(int currentValue); int GetCurrentProgress(); void UpdateProgressBar(); } public class ProgressBar : IProgressBar { private int maxValue; private int currentValue; private Timer timer; public void SetMaxValue(int maxValue) { this.maxValue = maxValue; } public void SetCurrentValue(int currentValue) { this.currentValue = currentValue; } public int GetCurrentProgress() { return currentValue * 100 / maxValue; } public void UpdateProgressBar() { Console.Clear(); string progressBar = new string('=', GetCurrentProgress()) + new string(' ', 100 - GetCurrentProgress()); Console.WriteLine($"[{progressBar}] {GetCurrentProgress()}%"); Console.WriteLine("Press any key to stop..."); } } public class Program { static void Main(string[] args) { IProgressBar progressBar = new ProgressBar(); progressBar.SetMaxValue(100); progressBar.SetCurrentValue(0); Timer timer = new Timer(1000); timer.Elapsed += (sender, e) => { progressBar.UpdateProgressBar(); progressBar.SetCurrentValue(progressBar.GetCurrentProgress() + 10); if (progressBar.GetCurrentProgress() >= 100) { progressBar.UpdateProgressBar(); timer.Stop(); Console.WriteLine("Progress completed!"); } }; timer.Start(); Console.ReadKey(); } } ``` 以上是一个简单的示例,展示了如何通过netcore创建一个动态的进度条接口及实现类,并在控制台中显示进度条的效果。可以根据实际需求进行适当的改进和扩展。 ### 回答3: netcore 是一个开源的跨平台框架,用于构建高效、可扩展的Web应用程序。动态进度条是一种用于显示任务进度的控件。接口则是用于不同组件之间进行交互的约定。下面是一个关于netcore动态进度条接口的思路。 首先,需要定义一个接口,其中包含访问任务进度的方法。这个接口可以包含获取当前进度、获取总进度以及取消任务等方法。 然后,实现这个接口的具体类,用于管理任务的进度。这个类可以通过私有变量来保存当前进度和总进度,并提供相应的方法来修改进度信息。 接下来,可以在前端页面中使用netcore的Razor视图引擎来渲染动态进度条。可以使用Bootstrap框架来创建进度条的样式,并通过调用后台接口获取当前进度,以动态更新进度条的显示。 在后台代码中,可以使用异步编程模型来处理耗时的任务,同时更新进度。可以使用C#中的Task类来表示一个任务,并通过async和await关键字来实现异步操作。 为了确保进度的实时性,可以使用SignalR来实现实时通信。当任务进度发生变化时,后台可以通过SignalR将进度信息实时推送到前端页面,以更新进度条的显示。 最后,为了保证任务的可取消性,可以在后台代码中捕获取消异常,通过调用取消任务的方法来终止任务的执行。 综上所述,针对netcore动态进度条接口,可以通过定义接口、实现类、使用Razor视图引擎、异步编程模型、SignalR和取消异常等技术来实现进度条的动态显示和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值