Почему Visual Studio пропускает мое исключение из рабочего элемента ThreadPool? - PullRequest
1 голос
/ 28 апреля 2009

Мне известно об этом другом сообщении , но, похоже, это не относится к моей ситуации.

Прежде всего, вот мое окружение:
Windows XP 64-битный SP3; Visual Studio 2008 с SP; .NET 3.5 SP1; Приложение WPF.

Моя проблема в том, что я не могу шагнуть туда, где происходит мое исключение. Он просто продолжает работать вместо продолжения сеанса отладки.

Вот некоторый код - я не написал все это, поэтому, пожалуйста, не нужно комментировать имена:)

// start up the WPF application
// set the handler for the Checked event
ToggleButton channelButton1 = new ToggleButton();
channelButton1.Checked += (s, e) => 
     ThreadPool.QueueUserWorkItem(SetTcpChannel, 1);

Тогда в этом SetTcpChannel методе:

    try
    {
        int channel = (int)state;
        EnsureTcpSocket();
        // more logic to do stuff with channel 
        // that we don't care about for SO
        ...
    }
    catch (Exception e)
    {
        // just for illustration
        // this is where I expected the code to return
        ...
    }

И, наконец, в том месте, где на самом деле происходит исключение (внутри EnsureTcpSocket):

    if (_tcp == null)
    {
        // this is not a valid ip/port since the 
        // target machine is not running (test condition)
        // but that's ok, I should get some exception 
        // and continue debugging...right?
        _tcp = new TcpClient(ip, port);
    }

Вот что я делал:

  1. Я установил точку останова на EnsureTcpSocket строка внутри SetTcpChannel
  2. F11 (шаг) EnsureTcpSocket так что я могу видеть _tcp кусок код
  3. Попробуйте F10 (шаг за шагом) TcpClient конструктор

На этом последнем шаге приложение возвращается из отладчика и продолжает работать, и я никогда не вижу исключений.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 28 апреля 2009

Как долго ты ждал? В зависимости от того, что это за аргументы, конструктор TcpClient может подождать, пока истечет время ожидания, прежде чем выдать исключение. (Если в соединении отказано, это другое дело.)

1 голос
/ 28 апреля 2009

Есть ли у вас точка останова внутри блока catch, если нет, я не понимаю, почему отладчик прерывает выполнение и останавливается там?

В качестве альтернативы, в Visual Studio вы можете установить параметры отладки для прерывания исключений первого шанса, вот старый пост, который описывает, как .

...