2017-07-06 88 views
0

我有一个运行一系列任务的进程,并且每个任务都更新一个文本框,但是我的问题是屏幕无法加载,直到完成所有任务,我需要将它们看作他们发生。在我以前的VBA语言中,这可能是DoEventsMe.Repaint。我做错了什么,导致我的文本框不显示每次发送内容时发送给它的内容?刷新屏幕上的文本框

这是在ASP.net和C#中。这是aspx页面: -

<%@ Page Title="ASC Open" Language="C#" AutoEventWireup="true" CodeBehind="ASC_OSC.aspx.cs" Inherits="HICS.ASC_OSC" %> 

<head runat="server"> 
    <title>HICS</title> 
    <meta charset="utf-8" /> 
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 
    <asp:PlaceHolder runat="server"> 
     <%: Scripts.Render("~/bundles/modernizr") %> 
    </asp:PlaceHolder> 
    <webopt:BundleReference runat="server" Path="~/Content/css" /> 
</head> 
<body style="padding-top: 5px"> 
    <form id="main" runat="server"> 
     <div class="container-fluid" style="padding-top: 0px"> 
      <h1>Open Access Supply Chain</h1> 
      <hr /> 
      <div class="container-fluid"> 
       <div ID="ContRow" class="row"> 
       <div class="col-md-12"> 
        <asp:TextBox ID="TxtStatus" runat="server" Height="80%" Width="80%" ReadOnly="true" Wrap="true" AutoPostBack="false" TextMode="MultiLine"></asp:TextBox> 
       </div> 
       </div> 
      </div> 
     </div> 
    </form> 
</body> 

这是C#代码段(不是所有的显示,因为它是代表),它是TxtStatus我在乎现在。

using System; 
//using System.Collections.Generic; 
//using System.Linq; 
//using System.Web; 
using System.Web.UI; 
//using System.Web.UI.WebControls; 
//using System.Web.UI.HtmlControls; 
using System.Data.SqlClient; 
using System.Diagnostics; 
using System.Runtime.InteropServices; 

namespace HICS 
{ 
    public partial class ASC_OSC : Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      SqlDataReader RS; 
      int  IntPort; 
      int  IntEnvironment; 
      bool BlnOK; 
      string StrEnvironmentName; 
      string StrEnvironmentDB; 
      Database DB_ASC = new Database(); 


      if (!IsPostBack) 
      { 
       BlnOK = true; 
       TxtStatus.Text += "Getting Port: "; 
       string StrReturn = home.Procs.UserSetting("ASC_Port"); 
       if (StrReturn == "" || StrReturn == "0") 
       { 
        RS = home.DB_HICS.GetRS("SELECT MAX([ASC_Port]) FROM [Tb_Users]"); 
        RS.Read(); 
        IntPort = (RS.GetInt32(0) < 4444)? 4444 : RS.GetInt32(0) + 1; 
        home.Procs.UserSetting("ASC_Port", IntPort.ToString()); 
        RS.Close(); 
       } 
       else 
       { 
        IntPort = Convert.ToInt32(StrReturn); 
       } 
       TxtStatus.Text += String.Concat(IntPort.ToString() , Environment.NewLine); 

       TxtStatus.Text += "Getting Environment: "; 
       IntEnvironment = 0; 
       StrReturn = home.Procs.UserSetting("ASC_Environment"); 
       if (StrReturn == "" || StrReturn == "0") 
       { 
        RS = home.DB_HICS.GetRS("SELECT MIN([ID]) FROM [Tb_ASC_Environments]"); 
        RS.Read(); 
        if (RS.IsDBNull(0)) 
        { 
         BlnOK = false; 
        } 
        else 
        { 
         IntEnvironment = RS.GetInt32(0); 
         home.Procs.UserSetting("ASC_Environment", IntEnvironment.ToString()); 
        } 
        RS.Close(); 
       } 
       else 
       { 
        IntEnvironment = Convert.ToInt32(StrReturn); 
        RS = home.DB_HICS.GetRS("SELECT COUNT([ID]) FROM [Tb_ASC_Environments] WHERE [ID] = " + IntEnvironment); 
        RS.Read(); 
        if (RS.GetInt32(0)==0) 
        { 
         RS.Close(); 
         RS = home.DB_HICS.GetRS("SELECT MIN([ID]) FROM [Tb_ASC_Environments]"); 
         RS.Read(); 
         if (RS.IsDBNull(0)) 
         { 
          BlnOK = false; 
         } 
         else 
         { 
          IntEnvironment = RS.GetInt32(0); 
          home.Procs.UserSetting("ASC_Environment", IntEnvironment.ToString()); 
         } 
        } 
        RS.Close(); 
       } 
       TxtStatus.Text += String.Concat((BlnOK)?IntEnvironment.ToString():"Error", Environment.NewLine); 

       if (BlnOK) 
       { 
        RS = home.DB_HICS.GetRS("SELECT [Name],[Database] FROM [Tb_ASC_Environments] WHERE [ID] = " + IntEnvironment); 
        RS.Read(); 
        StrEnvironmentName = RS.GetString(0); 
        StrEnvironmentDB = RS.GetString(1); 
        TxtStatus.Text += String.Concat("Environment Name: ", StrEnvironmentName, Environment.NewLine); 
        TxtStatus.Text += String.Concat("Environment Database: ", StrEnvironmentDB, Environment.NewLine); 
        TxtStatus.Text += "Connecting to ASC Database: "; 

       } 
      } 
     } 
    } 
} 
+0

您将不得不在后台启动进程,并使用AJAX请求轮询不同端点以查看状态(例如,使用jQuery),以更新文本框。 – ps2goat

+0

啊哇,这听起来很复杂:(真的希望留在ASP.NET和C# –

+1

这是可行的在ASP.NET和C# - 只需添加一点点的JS混合。 – Filburt

回答

2

你要明白,一个网页是从那里你可以DoEventsRepaint每当你需要一个桌面客户端应用程序有着根本的不同。 ASP.NET在服务器端执行,因此在提交页面和处理服务器上的事件之间执行完整的往返。

如果您开始一个长时间运行的任务并想获取进度信息,则需要使用AJAX。

Introduction to the UpdateProgress Control一个旧的概念

track the progress of a database save in a “live” progress bar asp.net mvc一个现代的方法

...你必须做出选择。您的具体方案。