1

それで、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 がクラッシュしました。(私のOS: Win7 64Bit) これでよろしいですか? そうでない場合、修正可能ですか?

4

2 に答える 2

4

これは、Visual Studio (明らかに VS2010 以降) とクラスの既知の問題です。Ping

Microsoft から 2012 年 6 月 2 日 09:11 に投稿され
ました。フィードバックをお寄せいただきありがとうございます。これは、Ping クラスで使用される基になる Windows API の既知の問題です。Windows チームは、問題の最適な処理方法を決定します。

于 2013-07-09T00:38:04.817 に答える
0

Directly operate UI in the thread will crash.You should use Invoke or BeginInvoke.Invoke is synchronization.BeginInvoke is asynchronization.

 this.Invoke(new EventHandler(delegate
        {
            ListBoxItem item = new ListBoxItem();
            item.Content = "192.168.1." + i.ToString();
            targetsList.Items.Add(item);
            targetsList.Items.Refresh();
        }));
于 2013-07-09T00:32:35.113 に答える