使用异步AJAX时,Silverlight应用程序不会变为空闲状态

问题描述

| 我目前正在使用支持自身与JavaScript之间双向通信的Silverlight 5应用程序。 Silverlight应用程序负责渲染3D内容,JavaScript负责收集和准备要渲染的数据。 我面临的问题是,Silverlight 5 DrawingSurface仅在使DrawingSurface无效且应用程序变为空闲之后才重新绘制。不幸的是,当使用异步AJAX请求从服务器下载我需要的数据时,在所有数据都下载完之后,DrawingSurface才会重新绘制(尽管在下载每条数据后使DrawingSurface无效)。 我理解这一点,但是令我困惑的是,当我在Silverlight中使用WebClient进行完全相同样式的异步下载请求时,DrawingSurface在大多数无效调用之后成功地重新绘制。 最初,我认为这可能是由于某些线程问题引起的,但是所有调用(和回调)都在同一线程上进行。我曾尝试使用jQuery的AJAX API和用JavaScript编写我自己的XmlHttpRequest处理程序;但是我在两种方法上都得到相同的结果。我最初注意到jQuery返回的数据与我请求数据时的顺序相同(而Silverlight的WebClient不是),这导致我创建自己的XmlHttpRequest处理程序,因为我认为可能需要重新排序导致脚本在异步调用期间保持活动状态。 之前是否有人遇到过此问题,和/或是否有人对解决方法/修复有任何建议?     

解决方法

        根据您的解释,难道不应该在每次抽奖结束时使表面无效(我有点像游戏的抽奖循环)吗?您的帧速率会增加,但是在大多数情况下,这不会成为问题(并且它将使摄像机和资源管理更加容易)。 无论如何,请不要忘记渲染逻辑是在其自己的线程上执行的:您将必须适当地锁定共享实例。
public void Draw(object sender,System.Windows.Controls.DrawEventArgs e)
{
   var device = e.GraphicsDevice;


   device.Clear(ClearOptions.Target | ClearOptions.DepthBuffer,new Color(0,0f),//Drawing logic.
   [...]

   e.InvalidateSurface();


}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...