Silverlight中,调用js,js调用java的Applet插件,Applet插件调用本机上的扫描驱动,打开扫描仪。由于扫描操作比较耗时,而silverlight调用js会造成silverlight的进程阻断。时间长了之后会提示silverlight插件无响应。这个问题怎么解决?
silverlight 中能走线程吧,启动一个线程去调用扫描仪。
http://msdn.microsoft.com/zh-cn/library/cc221403(v=VS.95).aspx
@zhangzl: 建议你认真阅读下我提供的链接,以及其它章节,比如:托管线程处理。会不会造成阻塞,你可以自己测试。从理论模型上来讲,线程 A 和 线程 B 只要没有资源争夺,就不存在谁阻塞谁的问题。但实际的情况下,根据硬件的特性,OS的调度,运行时的机制,以及应用的逻辑,A 和 B 会存在资源争夺情况,争夺的激烈程度在用户忍受的范围内时,我们就认为不会阻塞。
@Launcher: 谢谢你的回答,启动线程是一个好的方法,但是这个方法:HtmlPage.Window.Invoke("startScan");只能执行在UI线程中,让我比较纠结。
@zhangzl:this.Dispatcher.BeginInvoke(newAction(()=> settings =HtmlPage.Window.Invoke
@Launcher: 这个执行不就又回到主线程了吗
@zhangzl: 哦,那它有没有立即返回的调用方式呢?比如:startScan 立即返回,然后有另一个方法 queryScanProgress 来查询进度?
或者,它有没有 api 带 callback的,类似 WriteFile 的方式?
@Launcher: 那个得修改扫描的Java Applet,找了领导研究这个的可行性去了