您的位置:首页 > 其它

\t\t当异步请求与Silverlight相遇时,彼此通信问题的解决办法

2013-06-09 15:37 316 查看
当异步请求与Silverlight相遇时,彼此通信问题的解决办法
避免由于彼此“准备状态”而不能得到执行
避免由于加载冲突而被重复执行调用
避免由于加载的等待时差而错失良机
避免由于通信的需要而浪费掉异步的优越性

全局对象的重用、异步优势、重复浪费
<object id="silverlightControl" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
<param name="source" value="ClientBin/SilverlightXML.xap"/>
<param name="onError" value="onSilverlightError" />
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50401.0" />
<param name="autoUpgrade" value="true" />
<param name="windowless" value="true" />
<param name="onload" value="onSilverlightLoaded" />
<param name="enableHtmlAccess" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50401.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="获取 Microsoft Silverlight" style="border-style:none"/>
</a>
</object><iframe id="_sl_historyFrame" style="visibility:hidden;height:0px;width:0px;border:0px"></iframe>

var SilverlightPage = null/*Silverligh主体对象*/, jsonData = null/*异步数据*/, IsRun = false/*是否已经被执行标记*/;
$(function() {
var obj = { userId: 12345 };
$.post("AsynGetPersonalDevelopmentReport",
obj,
function(json) {
jsonData = json;
SilverlightPage && LoadData();//如果Silverlight准备好了,那么我就着手执行数据
}, 'json');
});
/*Js发送数据给Silverlight,执行暴露给Js的方法*/
function LoadData() {
if (IsRun) { return; }
IsRun = true;
try {
SilverlightPage.Process(jsonData);
}
catch (err) {
var txt = "Silverlight调用异常。\n";
txt += "异常描述: " + err.description + "\n\n";
txt += "点击OK继续。\n\n";
alert(txt);
}
}
/*Silverligh准备好后执行的脚本*/
function onSilverlightLoaded() {
var slHost = document.getElementById("silverlightControl");
SilverlightPage = slHost.Content.Page;
jsonData && LoadData();
}
/*Silverligh发送错误后执行的脚本*/
function onSilverlightError(sender, args) {
var appSource = ""; if (sender != null && sender != 0) { appSource = sender.getHost().Source; }
var errorType = args.ErrorType; var iErrorCode = args.ErrorCode;
if (errorType == "ImageError" || errorType == "MediaError") { return; }
var errMsg = "Silverlight 应用程序中未处理的错误 " + appSource + "\n";
errMsg += "代码: " + iErrorCode + " \n";
errMsg += "类别: " + errorType + " \n";
errMsg += "消息: " + args.ErrorMessage + " \n";
if (errorType == "ParserError") {
errMsg += "文件: " + args.xamlFile + " \n";
errMsg += "行: " + args.lineNumber + " \n";
errMsg += "位置: " + args.charPosition + " \n";
}
else if (errorType == "RuntimeError") {
if (args.lineNumber != 0) {
errMsg += "行: " + args.lineNumber + " \n";
errMsg += "位置: " + args.charPosition + " \n";
}
errMsg += "方法名称: " + args.methodName + " \n";
}
alert(errMsg);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: