我可以“;取消”;在更新面板中发生的长时间运行的进程
Can I "cancel" a long-running process that is happening within an updatepanel?
我有一个更新面板,它包含一个下拉列表,一旦页面加载完成,它就会用最新数据填充下拉列表。数据抓取可能需要长达3分钟的时间。我可以选择用户"取消"请求并只使用数据的最后版本吗?
在更新面板中,我有一个未绑定的下拉列表(在设计时)。页面渲染完成后,我用javascript调用更新面板中的button.click事件来获取数据:
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"是我创建的一个对象,它继承了IEnum可耕,并具有一个公开的public List<DictionaryEntry>
,这就是"Key"answers"Value"的作用所在。
当调用构造函数时,它会转到Web服务并获取我要用于下拉列表的数据。这个获取几乎需要3分钟才能完成,然后将其存储到我的数据库中。然后,我获取数据库表并填充public List<DictionaryEntry>
,然后将其返回到更新面板以供使用。
该体系结构用于获取(其第三方)的方式是,我(通过web服务)对数据对象发出请求。它会立即为结果返回一个唯一的标识符。然后,我使用服务中的另一个方法,并传入唯一ID来检查数据的状态。我每10秒循环检查一次。一旦它返回"完整"消息,我就使用相同的唯一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();
}
有什么方法可以中途停止这个过程吗?我想我想在while循环中加入一个齿轮来阻止它。
感谢阅读。
您可以调用.abortPostBack();
来取消Ajax请求
function CancelPostBack() {
var objMan = Sys.WebForms.PageRequestManager.getInstance();
if (objMan.get_isInAsyncPostBack())
objMan.abortPostBack();
}
有关详细信息,请查看http://www.codedigest.com/Articles/ASPNETAJAX/125_Using_UpdateProgress_Control_Effectively.aspx
您可以将UpdateProgress
添加到页面和ProgressTemplate
放置,这将取消回发,您将有机会在代码中处理取消。此外,您应该将其他答案中的代码添加到此按钮,以取消返回的帖子。
- 从已经运行的进程打开chrome扩展的背景页
- PM2 在运行时更改集群进程大小
- Meteor - 如何同时运行多个服务器进程
- 节点.js子进程中的运行函数
- 是否可以从在Firefox或IE的网页中运行的Javascript启动Windows进程
- CasperJS能否在同一进程中运行多个实例
- 如何运行通过 AJAX 进程包含的 JavaScript 代码
- 加载页面前运行进程
- 承诺被拒绝后停止运行进程
- 使用 node.js (子进程) 运行 shell 脚本
- 在节点.js上运行多个进程时输出无序
- Node.js 应用无法在端口 80 上运行,即使没有其他进程阻止该端口也是如此
- PHP 在进程运行时刷新临时表单
- Upstart说我的脚本正在运行,但API在我重新启动进程之前不返回数据
- PHP脚本重新运行自己,直到进程完成.然后每周重新启动
- 访问节点中长时间运行的进程的grpc流变量
- 如何将异步进程更改为作为同步进程运行
- 如果进程仍在运行,Javascript警报
- Javascript来运行进程
- 使用NodeJS自触发永久运行的Firebase进程