ASPX载入页面

时间:2014-07-27 20:09:32

标签: c# asp.net

所以我正在学习在Visual Studios 2013上开发.aspx网站,并想知道是否有办法创建一个"加载屏幕"我执行了一个可执行文件?

这个想法是用户按下一个生成按钮,它运行可执行文件并显示另一个页面/弹出窗口/等。在可执行文件完成之前,它将有一个加载图像和一些文本。然后我希望它重定向到另一个页面。

这是实现这一目标的最好方法吗?

代码示例总是有利的!感谢

1 个答案:

答案 0 :(得分:0)

从高层来看:

  1. 用户向您的Web应用程序发出请求以开始该过程(我假设它是您要运行的命令行.exe并等待结果)
  2. 请求处理程序将生成一个新线程,然后启动新进程并等待进程结束。您的代码将为此线程/进程分配一个任意标记并将其存储在某处。当进程完成时,子线程将更新存储以说明该进程已完成。
  3. 请求处理程序然后立即向用户返回响应以通知他们该进程当前正在运行
  4. 立即响应页面将包含一个JavaScript或<meta http-equiv="refresh" />,它会导致页面每10秒左右重新加载一次,或者启动Comet请求到服务器以接收子进程完成的通知。
  5. 当请求处理程序再次收到请求时,它会在步骤2中执行的商店中查找它,看看它是否已完成,如果有,那么它将返回相同的“请稍候”自动刷新响应,否则它将在流程完成时返回您想要的下一页。
  6. 这样的事情:

     // Note these fields are static so they persist between page-loads
     private static Dictionary<Int32,Boolean> _processes = new Dictionary<Int32,Boolean>();
     private static Int32 _processNum;
    
     ActionResult StartBackgroundTask() {
    
        Int32 num = _processNum++;
        _processes.Add( num, false );
    
        Thread thread = new Thread( delegate() {
    
            Process proc = new Process("MyExe.exe");
            proc.Start();
            proc.WaitForExit();
    
            _processes[ num ] = true; // marking as complete
        } );
        thread.Start();
    
        return View("BackgroundTaskIsRunning.aspx", num);
     }
    
     ActionResult GetBackgroundTaskState(Int32 num) {
        // Token `num` received from client.
    
        if( _processes[ num ] ) {
            return View("NextTask.aspx");
        } else {
            // Same view as before
            return View("BackgroundTaskIsRunning.aspx", num);
        }
     }