Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我可以吗;取消“;在updatepanel中发生的长时间运行的进程?_Javascript_Asp.net_Ajax_Asynchronous_Updatepanel - Fatal编程技术网

Javascript 我可以吗;取消“;在updatepanel中发生的长时间运行的进程?

Javascript 我可以吗;取消“;在updatepanel中发生的长时间运行的进程?,javascript,asp.net,ajax,asynchronous,updatepanel,Javascript,Asp.net,Ajax,Asynchronous,Updatepanel,我有一个updatepanel,其中包含一个下拉列表,一旦页面完成加载,它将使用最新数据填充下拉列表。数据抓取最多需要3分钟。我是否可以选择用户“取消”请求,只使用最新版本的数据 在updatepanel中,我有一个未绑定的下拉列表(在设计时)。页面完成渲染后,我会调用一个按钮。单击updatepanel中的事件以获取数据: private void RefreshDDL() { hidAction.Value = ""; ddlCampaigns.DataSource = my

我有一个updatepanel,其中包含一个下拉列表,一旦页面完成加载,它将使用最新数据填充下拉列表。数据抓取最多需要3分钟。我是否可以选择用户“取消”请求,只使用最新版本的数据

在updatepanel中,我有一个未绑定的下拉列表(在设计时)。页面完成渲染后,我会调用一个按钮。单击updatepanel中的事件以获取数据:

private void RefreshDDL()
{
    hidAction.Value = "";
    ddlCampaigns.DataSource = myDataSource;
    ddlCampaigns.DataTextField = "Value";
    ddlCampaigns.DataValueField = "Key";
    ddlCampaigns.DataBind();
    ddlCampaigns.Visible = true;

    pnlDetails.Attributes.CssStyle.Clear();
    pnlPleaseWait.Visible = false;
    btnOK.Enabled = true;
}
对象“myDataSource”是我创建的一个对象,它继承了IEnumarable,并具有一个公开的
公共列表,这就是“键”和“值”发挥作用的地方

当调用构造函数时,它将转到webservice并获取我想要用于下拉列表的数据。此提取过程需要大约3分钟才能完成,然后将其存储到我的数据库中。然后,我获取数据库表并填充
公共列表
,然后将其返回到updatepanel以供使用

该体系结构用于获取(其第三方)的方式是,我(通过web服务)对数据对象发出请求。它立即返回结果的唯一标识符。然后,我使用服务中的另一个方法并传入唯一ID来检查数据的状态。我每10秒循环检查一次。一旦返回“complete”消息,我将使用相同的唯一ID获取实际数据:

private void RefreshList()
{
    MyProxy proxyRequest = new MyProxy ();
    List<string> myList= new List<string>();
    if (UpdateNeeded())
    {
        ProgramManagement.ThirdPartyServiceApi.runReport report = new ProgramManagement.ThirdPartyServiceApi.runReport();
        report.reportName = "MyData";
        try
        {
            ProgramManagement.ThirdPartyServiceApi.runReportResponse response = proxyRequest.runReport(report);

            while (!ReportComplete(response.@return))
            {
                System.Threading.Thread.Sleep(10000);
            }
            StoreList(GetReport(response.@return));
        }
        catch (SoapException ex)
        {
            if (ex.Message == TOO_MANY_REQUESTS)
            {
                //display a message maybe?
            }
        }
    }

    AddDataToList();

}
private void RefreshList()
{
MyProxy proxyRequest=新建MyProxy();
List myList=新列表();
if(UpdateNeeded())
{
ProgramManagement.ThirdPartyServiceApi.runReport report=新建ProgramManagement.ThirdPartyServiceApi.runReport();
report.reportName=“MyData”;
尝试
{
ProgramManagement.ThirdPartyServiceApi.runReportResponse=proxyRequest.runReport(报告);
而(!ReportComplete(response@return))
{
系统线程线程睡眠(10000);
}
StoreList(GetReport(response@return));
}
捕获(SoapException-ex)
{
if(例如Message==请求过多)
{
//可能会显示消息吗?
}
}
}
AddDataToList();
}
有没有办法中途停止这个过程?我想我会在while循环中加一个齿轮来阻止它


感谢阅读。

您可以调用
.abortPostBack()
取消Ajax请求

function CancelPostBack() {

var objMan = Sys.WebForms.PageRequestManager.getInstance();

if (objMan.get_isInAsyncPostBack())

    objMan.abortPostBack();

}

有关详细信息,请查看

您可以在页面和
ProgressTemplate
put中添加一个
UpdateProgress
,这将取消回发,您将有机会在代码中处理取消。
您还应将其他答案中的代码添加到此按钮以取消回发。

仅略过您的问题,您可以取消同步回发: