C# 暂停循环,直到单击“模式”按钮

C# 暂停循环,直到单击“模式”按钮,c#,asp.net,webforms,C#,Asp.net,Webforms,我需要在循环过程中手动输入一些值。我正在将C#ASP.Net与WebForms一起使用 我正在尝试这个: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace systemII { public partial class MY_System :

我需要在循环过程中手动输入一些值。我正在将C#ASP.Net与WebForms一起使用

我正在尝试这个:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace systemII
{
    public partial class MY_System : System.Web.UI.Page
    {
        private List<String> List = new List<string>();
        private bool loop = false;

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            while (loop) { }

            for (int i = 1; i <= 10; i++)
            {
                string a = "A" + i.ToString();
                if (i == 4 || i == 5)
                {
                    loop = true;
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
                }
                else
                {
                    List.Add(a);
                }
            }
        }

        protected void Button2_Click(object sender, EventArgs e) // modal button
        {
            string b = "BB";
            Lista.Add(b);
            loop = false;
            return;
        }
    }
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Web.UI;
使用System.Web.UI.WebControl;
名称空间系统II
{
公共部分类MY_System:System.Web.UI.Page
{
私有列表=新列表();
私有布尔循环=假;
受保护的无效页面加载(对象发送方、事件参数e)
{
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
while(循环){}

对于(int i=1;i在ASP.Net中,您不能只是暂停服务器端代码,因为服务器端代码总是完全执行(从不部分执行)即使您在ASP.Net和ASP.Net中使用异步页面,服务器端也不会连接到浏览器,而是在一个单独的进程中执行。浏览器永远不知道也不关心服务器端发生了什么,服务器端也不知道也不关心浏览器在做什么,
,因此不可能连接服务器端c以您想要的方式浏览ode

但是,当到达第一个索引=4并发出模式弹出脚本时,您可以通过中断循环来模拟您想要的内容。然后,当用户输入了i=4的值并且页面已发回时,您可以对i=5执行类似的操作。但是,成功处理输入的
i
的值需要在re中跟踪从浏览器中执行任务,在下面的代码中通过设置名为
HandledValues
ViewState
变量来完成,该变量只是字符串类型列表的集合

因此,如果您使用此代码,工作流将是:系统将提示用户在模式弹出窗口中输入i=4的值,然后单击按钮
Button1
并返回页面时,系统将提示用户在模式弹出窗口中输入i=5的值

protected void Button1_Click(object sender, EventArgs e)
{
     //a list of values handled is stored in ViewState as ValuesHandled
     List<string> handledValues = new List<string>();
     if (ViewState["ValuesHandled"] != null) {
         List<string> handledValues =  (ViewState["ValuesHandled"] as List<string>;
     }

    for (int i = 1; i <= 10; i++)
    {
        string a = "A" + i.ToString();
        //check if i = 4 has had its values input successfully
        if (i == 4  && !handledValues.Contains(i.ToString()))
        {
            loop = true;
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
            handledValues.Add(i.toString());
            //break the loop since we need to return to browser for input by user
            break;
        }
        else if (i == 4 && handledValues.Contains(i.ToString()))
        {
         //remove handled value if no modal popup needed to be opened
         handledValues.Remove(i.ToString())
        }
        else if (i == 5  && !handledValues.Contains(i.ToString()))
        {//check if i = 5 has had its values input successfully
            loop = true;
            handledValues.Add(i.toString());
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", "openModal();", true);
            //break the loop since we need to return to browser for input by user
            break;
        }
        else if (i == 5 && handledValues.Contains(i.ToString()))
        {
         //remove handled value if no modal popup needed to be opened
         handledValues.Remove(i.ToString())
        }
        else
        {
            List.Add(a);
        }
    }


    //update the ViewState for ValuesHandled
   ViewState["ValuesHandled"] = handledValues;
}
受保护的无效按钮1\u单击(对象发送者,事件参数e)
{
//处理的值列表作为ValuesHandle存储在ViewState中
List handledValues=新列表();
如果(ViewState[“ValueShandle”]!=null){
将handledValues=(ViewState[“ValuesHandled”]列为列表;
}

对于(int i=1;i,您当前正在运行同步代码)。考虑使用暂停和继续按钮。否则循环将首先完成,然后将您休息。我已经解决了我的问题与您的帮助!非常感谢: