在我的ASP.net web应用程序,我在我的页面的Page_Init事件(),检查一些会话变量是否发生了会话超时将用户重定向代码。
在我的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()的Page_Init()页事件之前Silvelright事件触发,有时后触发。在这种情况下,页面事件之前,Silverlight的火灾,会话状态是空的,导致用户无法正确重定向到“您的会话已超时”页面。只要page事件之后Silverlight的事件触发时,Session变量仍然存在,一切工作正常。
它看起来像Invoke方法的位置具有当页面级事件被触发上没有关系,所以事件的顺序似乎是看似随意的。有没有办法订购的事件,以避免这些竞争条件?
有没有办法用一个Web应用程序页面的正常页面生命周期来协调这些异步回调事件,以避免这些竞争条件?
如果前后翻页的问题怎么样让你的ASP.net页火Silverlight的功能,它已经完成之后,所以会出现竞争状态。
下面是关于如何使Silverlight中的事件从外部JavaScript,应该帮助编写脚本的一个Link。