VS2012 Is A BSOD Causer
本文关键字:Causer BSOD Is VS2012 | 更新日期: 2023-09-27 18:21:39
所以经过36个小时的研究和检查,我得到了它。
VS2012是"进程已锁定页面"BSOD之后的原因
我试图打开一个线程来获取网络上的活动IP(使用C#)。显然,当你在线程处于活动状态时按下"停止"按钮,窗口就会被挤压。
这是线程代码:
private void Button_Click_2(object sender, RoutedEventArgs e)
{
var thread = new Thread(() => TryToConnect(targetsList));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
}
private static void TryToConnect(ListBox targetsList)
{
for (int i = 1; i < 3; i++)
{
Uri url = new Uri("http://192.168.1." + i.ToString());
string pingurl = string.Format("{0}", url.Host);
string host = pingurl;
Ping p = new Ping();
try
{
PingReply reply = p.Send(host, 3000);
if (reply.Status == IPStatus.Success)
{
ListBoxItem item = new ListBoxItem();
item.Content = "192.168.1." + i.ToString();
targetsList.Items.Add(item);
targetsList.Items.Refresh();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
// Thread.Sleep(10);
}
}
正如您所看到的,线程使用Ping 255次,因此完成它需要时间。当我按下"停止"按钮时,显然VS2012调试进程使Windows崩溃。每次我尝试时,Windows都会崩溃。(我的操作系统:Win7 64位)我说得对吗?如果没有,它可以修复吗?
这是Visual Studio(显然是自VS2010以来)和Ping
类的已知问题。
由Microsoft于2012年2月6日09:11发布
感谢您的反馈。这是Ping类使用的底层Windows API的一个已知问题。Windows团队将决定如何最好地处理此问题。
在线程中直接操作UI会崩溃。您应该使用Invoke或BeginInvoke。Invoke是同步。BeginInvoke是异步化。
this.Invoke(new EventHandler(delegate
{
ListBoxItem item = new ListBoxItem();
item.Content = "192.168.1." + i.ToString();
targetsList.Items.Add(item);
targetsList.Items.Refresh();
}));