- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我知道所有浏览器都是单线程的,不可能在 JavaScript 或 Flash Player Thread.sleep 中实现。我决定尝试使用“System.Threading”库在Silverlight中实现Thread.Sleep。
App.xaml.cs
using System.Windows;
using System.Windows.Browser;
using System.Threading;
namespace ThreadSleep
{
public partial class App : Application
{
public App()
{
InitializeComponent();
HtmlPage.RegisterScriptableObject("App", this);
}
[ScriptableMember]
public void Sleep(int mlsec)
{
Thread.Sleep(mlsec);
}
}
}
因此,我可以通过 JavaScript 代码执行 sleep 函数,但我的 Internet Explorer 卡住且没有响应。
这是我的例子:
Index.html
<HTML>
<BODY>
<SCRIPT LANGUAGE="JavaScript">
<!--
var SleepInterval = 10000;
function pause1(){
window.showModalDialog("PauseWin.html", this, 'dialogWidth:255px; dialogHeight:105px; status:0; scroll:0;');
alert("Resume");
}
function pause2(){
var control = document.getElementById("SleepSL");
control.Content.App.Sleep(SleepInterval);
alert("Resume");
}
function tick(){
var clock = document.getElementById("clock");
if(clock) clock.innerHTML = new Date();
}
setInterval(tick, 1000);
//-->
</SCRIPT>
<INPUT TYPE="button" value="Pause Modal Dialog" onclick="pause1()">
<INPUT TYPE="button" value="Pause Thread Sleep" onclick="pause2()">
<BR><BR>
<!--Youtube Video -->
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/RWNcGBSP0Wg?autoplay=1" frameborder="0" allowfullscreen></iframe>
<!-- Silverlight Sleep API -->
<object id="SleepSL" data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="1" height="1">
<param name="source" value="SleepSL.xap"/>
<param name="background" value="white" />
<param name="minRuntimeVersion" value="4.0.50826.0" />
<param name="autoUpgrade" value="true" />
<a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=4.0.50826.0" style="text-decoration:none">
<img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style:none"/>
</a>
</object>
<BR><BR>
<DIV ID="clock"/>
</BODY>
</HTML>
PauseWin.html
<html>
<title>Pause Window</title>
<style>body{margin-top:10}</style>
<body scroll="no">
<center style='font-size:14px;font-weight:bold'>
The window will automatically <br> close in <span id="time"></span> second(s).
</center>
<script type="text/javascript">
var ms = window.dialogArguments.SleepInterval;
function wait(){
var span = document.getElementById('time');
span.innerHTML = (ms / 1000);
setInterval(function(){ closeWindow(); }, ms);
setInterval(function(){ ms -= 1000; if(ms > 0) span.innerHTML = (ms / 1000); }, 1000);
}
function closeWindow(){
window.close()
}
wait();
</script>
</body>
</html>
通过执行index.html 文件,我启动了YouTube 视频和计时器。当我按下“暂停模态对话框”时,计时器停止,但视频继续播放,10秒后模态弹出窗口被JS“window.close()”破坏,在我的代码中我将转到下一行并执行警报(“Resume”)。没有任何变化,视频继续播放。现在,如果我使用 Silverlight Thread.Sleep 函数按下“暂停线程 sleep ”按钮。此时视频将挂起,通过单击 Internet Explorer,您可能会在 Process Explorer 中看到(未响应)状态。
我更喜欢在 COM、ActiveX 或 Silverlight 对象中使用 Thread.Sleep 函数,但我需要删除线程死锁。获得与 JavaScript 模态对话框或警报中相同的行为。
提前非常感谢。
问候,
大卫·戈夫曼
代码:
最佳答案
您的代码正在按照您的指示执行操作:它正在休眠浏览器的 UI 线程,这意味着您的浏览器无法处理更多消息,因此它在休眠期间有效地挂起您的浏览器。浏览器中的 Thread.Sleep() 就是死亡:只是不要这样做,无论是在 Silverlight 还是任何其他框架中。
更好的方法是退后一步,问自己为什么要 sleep ,然后找出一种合理的异步方式来做到这一点。几年前进入 Silverlight 异步世界后,我意识到这一开始可能会让人迷失方向,但我也可以证明我总是找到相当干净的方法来正确完成它。
另一种说法:如果您不知道如何做您真正需要完成的事情,请发布一个关于那个的问题,您可能会得到一些在这里帮忙。
例如,如果您只想等待“n”秒然后执行回调,则可以使用如下所示的帮助器类:
public class ThreadingHelper
{
public static void SleepAsync(int millisecondsToSleep, Action action)
{
var timer = new Timer(o => action());
timer.Change(millisecondsToSleep, Timeout.Infinite);
}
public static void SleepAsync(TimeSpan interval, Action action)
{
SleepAsync((int)interval.TotalMilliseconds, action);
}
public static void DispatcherSleepAsync(int millisecondsToSleep, Action action)
{
var interval = TimeSpan.FromMilliseconds(millisecondsToSleep);
DispatcherSleepAsync(interval, action);
}
public static void DispatcherSleepAsync(TimeSpan interval, Action action)
{
var timer = new DispatcherTimer();
EventHandler timerHandler = null;
timerHandler = (s, e) =>
{
timer.Tick -= timerHandler;
if (action != null)
{
action();
}
};
timer.Tick += timerHandler;
timer.Interval = interval;
timer.Start();
}
}
关于javascript - 消除 Internet Explorer 中 Thread.Sleep 上的死锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5302557/
像其他人一样,我需要在 Internet Explorer 6 和 Internet Explorer 7 上测试我的代码。现在,Internet Explorer 8 为开发人员提供了一些很棒的工具
我已经浏览了几个小时的注册表,但似乎无法找到控制 Internet Explorer 临时 Internet 文件设置的注册表。我想从自动更改为其他内容。 最佳答案 HKCU\Software\Mic
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Running Internet Explorer 6, Internet Explorer 7, and Int
作为一名开发者,我发现新的 Internet Explorer 版本完全是一场噩梦。我关闭了 Windows 功能,但无法安装 Internet Explorer 10 。它说它已经安装,但事实并非如
是否有任何分析器工具可以调试DOM中的哪个javascript /对象导致Internet Explorer挂起/崩溃。 CPU使用率将超过60%,我想知道其背后的原因,是哪个脚本/ Flash Ob
我正在尝试确定Internet Explorer上TTF字体格式的支持状态。 (我手头没有任何Windows计算机可以尝试。)The table at caniuse指出,从版本9开始的IE支持TTF
是否可以在 Internet Explorer 中切换多个版本的 JDK/JRE? 想要使用 jdk 1.4、jdk 5 和 jdk 6。 谢谢,迈克尔 最佳答案 据我所知,这并不容易做到,因为 IE
这应该是IE8下载问题的老问题了。我使用 PHP 来设置响应头,如: header("Pragma: public"); header("Expires: 0"); header("Content-t
这个问题在这里已经有了答案: 10年前关闭。 Possible Duplicate: Running Internet Explorer 6, Internet Explorer 7, and Int
我正在使用新的Internet Explorer 11开发人员工具将文档模式切换为“8”,但条件注释仍然被忽略,也就是说,它们没有被正确解析并且表现得像普通注释。因此,浏览器不会请求/加载条件注释内的
我在我的一个站点上遇到 Internet Explorer 6 问题,我真的希望我安装它而不是 Internet Explorer 7。有没有一种快速的方法来做到这一点? 最佳答案 下载Microso
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and t
如何访问 Internet Explorer 运行实例的经典 Internet Explorer COM 自动化对象?也就是说,如果我在多个窗口中打开 Internet Explorer,如何从 Po
string filename = Server.UrlPathEncode(Path.GetFileName(_Filename))); Response.AddHeader("Content-Di
当我尝试使用 Apache 2.2 在 Windows7(64 位)上的 IE9 或 IE10 中打开 localhost 时,解析 URL 需要很长时间。其他浏览器没有问题并立即解析 URL,只有
我有一个批处理文件,必须启动 Internet Explorer 并打开 www.google.com .当整个页面加载完成时,它应该终止 IE 进程,即关闭该系统中的所有 IE 实例。我的批处理文件
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6 个月前关闭。 Improve t
基本上,无论我使用 IE 访问哪个网站,我都可以看到那些黑色/白色形状,一旦我将鼠标移到它们上,它们就会消失。 想知道是否有人知道可能导致这种情况的原因? 另外:http://imageshack.c
我检查了所有注册表,但找不到所有已安装扩展的列表。 此时,IE 扩展/加载项的任何一般位置都会有所帮助。 最佳答案 取自 here : 浏览器帮助对象 - 旨在增强浏览器功能的浏览器插件。 条目可以在
这是一个两部分的问题。我正在构建一个网页,我需要知道: 有没有办法检测 IE 是否启用了平滑滚动(如果是,如何)? 有没有办法强制 IE 关闭我网页的平滑滚动功能? 明确地说,我不是在问如何关闭整个计
我是一名优秀的程序员,十分优秀!