异步事件处理程序的Silverlight页面生命周期问题

时间:2015-04-13 20:37:20

标签: asp.net silverlight arcgis

在我的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函数来隐藏Panel。包含此代码会导致整页回发。

HtmlPage.Window.Invoke("hideReport"); 

我的问题是有时queryCountyTask_ExecuteCompleted()Silvelright事件在Page_Init()Page事件之前触发,有时它会触发。在Silverlight在Page事件之前触发的情况下,会话状态为空,导致用户错误地重定向到“您的会话已超时”页面。只要Silverlight事件在Page事件之后触发,Session变量仍然存在,一切正常。

看起来Invoke方法的位置与触发页面级事件无关,因此事件的顺序看起来似乎是随机的。 有没有办法订购活动以避免这些竞争条件?

有没有办法将这些异步回调事件与Web应用程序页面的正常页面生命周期进行协调,以避免这些竞争条件?

1 个答案:

答案 0 :(得分:1)

如果您解决了如何让ASP.net页面在完成后触发Silverlight函数的问题,那么就没有竞争条件。

以下是关于如何使用外部javascript在Silverlight中创建脚本事件的Link应该有所帮助。