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

bpe*_*aro 11 asp.net silverlight arcgis

在我的ASP.net Web应用程序中,我在Page的Page_Init event()中有代码,它会检查一些会话变量,以便在发生会话超时时重定向用户.

在我的Silverlight应用程序中,我有一个按钮事件处理程序,它以异步方式执行一些ESRI ArcGIS代码,并配置一个在异步调用完成时触发的事件处理程序:

QueryTask queryTask = new QueryTask(myLayer.Url + "/" + layerID);
queryTask.ExecuteCompleted += new EventHandler<QueryEventArgs>(queryCountyTask_ExecuteCompleted);
queryTask.ExecuteAsync(query);
Run Code Online (Sandbox Code Playgroud)

还有一些代码在页面上调用JavaScript函数来隐藏Panel.包含此代码会导致整页回发.

HtmlPage.Window.Invoke("hideReport"); 
Run Code Online (Sandbox Code Playgroud)

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

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

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

Kev*_*oss 1

如果您将问题转向如何让 ASP.net 页面在完成后触发 Silverlight 函数,这样就不会有竞争条件。

这是一个关于如何使 Silverlight 中的事件可从外部 javascript 编写脚本的链接,应该会有所帮助。