[英]VS2012 Is A BSOD Causer
經過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 64Bit)我對嗎? 如果沒有,它是否可以修復?
這是Visual Studio的一個已知問題 (顯然是VS2010)和Ping
類。
微軟於06/02/2012於09:11發布
感謝您的反饋意見。 這是Ping類使用的基礎Windows API的已知問題。 Windows團隊將確定如何最好地處理該問題。
在線程中直接操作UI會崩潰。你應該使用Invoke或BeginInvoke.Invoke是synchronization.BeginInvoke是異步。
this.Invoke(new EventHandler(delegate
{
ListBoxItem item = new ListBoxItem();
item.Content = "192.168.1." + i.ToString();
targetsList.Items.Add(item);
targetsList.Items.Refresh();
}));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.