簡體   English   中英

VS2012是BSOD Causer

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM