小编leo*_*leo的帖子

Windows注册表中的哪个键禁用IE连接参数"自动检测设置"?

我正在尝试在IE中设置所有连接设置.

我已经找到了如何在路径中修改大部分内容:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings

但我找不到设置或取消设置"自动检测设置"的参数.

有帮助吗?

internet-explorer

24
推荐指数
3
解决办法
13万
查看次数

从工作线程调用UI线程时出现死锁

当我从工作线程调用UI线程时,我遇到了死锁.实际上,工作线程在调用行上被阻塞:

return (ucAvancementTrtFamille)mInterfaceTraitement.Invoke(d, new object[] { psFamille });
Run Code Online (Sandbox Code Playgroud)

奇怪的是UI线程(如果我错了,纠正我,是主线程)是空闲的.

有没有办法:

  1. 看看我实际上想要调用哪个线程?
  2. 看看线程到底在做什么?

我们可以在下图中看到,Invoke行上阻塞的工作线程(ID 3732),以及MainThread在应用程序的main函数中处于空闲状态.

替代文字

编辑:这是主线程的堆栈:

替代文字

编辑2:实际上,我第二次暂停了程序,这就是堆栈的样子:

替代文字

编辑3:找到解决方法

我终于找到了解决方法.问题显然是由于异步包装器竞争条件问题.解决方法是使用BeginInvoke并等待超时.当它超时时,再次调用它并循环直到它最终返回.大多数情况下,它实际上适用于第二次调用.

IAsyncResult ar = mInterfaceTraitement.BeginInvoke(d, new object[] { psFamille });
            while (!ar.AsyncWaitHandle.WaitOne(3000, false))
            {
                ar = mInterfaceTraitement.BeginInvoke(d, new object[] { psFamille });
            }
            // Async call has returned - get response
            ucAvancementTrtFamille mucAvancementTrtFamille = (ucAvancementTrtFamille)mInterfaceTraitement.EndInvoke(ar);
Run Code Online (Sandbox Code Playgroud)

它并不漂亮,但它是我找到的唯一解决方案.

.net c# multithreading deadlock invoke

11
推荐指数
1
解决办法
4728
查看次数

标签 统计

.net ×1

c# ×1

deadlock ×1

internet-explorer ×1

invoke ×1

multithreading ×1