【发布时间】:2015-06-19 07:29:04
【问题描述】:
在我的 ASP.net Web 应用程序中,我的页面的 Page_Init event() 中有代码,它检查一些会话变量以在发生会话超时时重定向用户。
在我的 Silverlight 应用程序中,我有一个按钮事件处理程序,它异步执行一些 ESRI ArcGIS 代码,并配置一个在异步调用完成时触发的事件处理程序:
QueryTask queryTask = new QueryTask(myLayer.Url + "/" + layerID);
queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryCountyTask_ExecuteCompleted);
queryTask.ExecuteAsync(query);
还有一些代码调用页面上的 JavaScript 函数来隐藏面板。包含此代码会导致整页回发。
HtmlPage.Window.Invoke("hideReport");
我的问题是,有时 queryCountyTask_ExecuteCompleted() Silvelright 事件在 Page_Init() Page 事件之前触发,有时它在之后触发。在 Page 事件之前触发 Silverlight 的情况下,会话状态为空,导致用户被错误地重定向到“您的会话已超时”页面。只要在 Page 事件之后触发 Silverlight 事件,Session 变量仍然存在并且一切正常。
看起来 Invoke 方法的位置与何时触发 Page-level 事件无关,因此事件的顺序似乎是随机的。 有没有办法对事件进行排序以避免这些竞争条件?
有没有办法将这些异步回调事件与 Web 应用程序页面的正常页面生命周期协调,以避免这些竞争条件?
【问题讨论】:
标签: asp.net silverlight arcgis