Ich habe einen Prozess, der eine Reihe von Aufgaben ausführt und mit jeder Aufgabe aktualisiert ein Textfeld, mein Problem ist jedoch, dass der Bildschirm nicht geladen wird, bis alle Aufgaben erledigt sind, und ich muss sie als sehen sie passieren. In meiner alten Sprache von VBA wäre dies DoEvents
oder Me.Repaint
gewesen. Was mache ich falsch, weil meine Textbox nicht jedes Mal anzeigt, was gesendet wird, wenn etwas an sie gesendet wird?Aktualisieren eines Textfelds auf dem Bildschirm
Dies ist in ASP.net und C#. Dies ist die aspx Seite: -
<%@ 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>
Und das ist das Snippet von C# (nicht alle zeigen, wie es repräsentativ ist), ist es TxtStatus
, die ich jetzt gerade über interessieren.
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: ";
}
}
}
}
}
Sie müssten einen Prozess im Hintergrund auslösen und einen anderen Endpunkt für den Status mithilfe von AJAX-Anforderungen abfragen (z. B. mithilfe von jQuery), wodurch das Textfeld aktualisiert würde. – ps2goat
Ah wow, das klingt kompliziert :(hoffte wirklich, in ASP.NET und C# –
bleiben Es ist machbar in ASP.NET und C# - fügen Sie einfach ein wenig JS zum Mix. – Filburt