如何解决使用异步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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。