К сожалению, если ваше приложение не может должным образом разорвать соединение, которое выполняется, прежде чем выход из конечного автомата RAS будет поврежден и должен перезагрузиться, чтобы устранить проблему. Я заметил, что Windows 7 справляется с такого рода сценариями лучше, чем XP и Vista, но все же бывают случаи, когда мне приходилось перезагружаться.
Мне удалось предотвратить большинство подобных проблем с API DotRas, если они возникают в обработчиках событий RasDialer, но если приложение вылетает из другого потока, а не из фонового потока, который вызывает события RasDialer, я ничего не могу с этим поделать.
Для асинхронного набора с использованием DotRas 1.2 SDK:
using DotRas;
RasDialer dialer = new RasDialer();
dialer.EntryName = "My Connection";
dialer.Credentials = new NetworkCredential("My", "User");
dialer.DialAsync();
С этого момента вы можете вызвать dialer.DialAsyncCancel (), если хотите отменить выполняемую попытку подключения.
Для синхронного набора с использованием DotRas 1.2 SDK очень похоже на асинхронный набор, за исключением замены вызова DialAsync просто dialer.Dial ().
Вот ссылка на API, о котором я говорил: http://www.codeplex.com/DotRas
Надеюсь, это поможет!