Я предпочитаю WithEvents / Handles в ситуациях, когда это применимо, потому что это лучше выражает то, что код должен делать. Одно предостережение с «WithEvents / Handles» заключается в том, что любой объект, который получает события от объекта с более долгим сроком службы, должен реализовывать IDisposable и должен устанавливать все его переменные WithEvents в Nothing, когда он удаляется, чтобы гарантировать, что все события не связаны. Отключение событий при использовании AddHandler / RemoveHandler также необходимо, но, возможно, более очевидно. При использовании WithEvents несколько легче забыть.
Кстати, я не знаю способа автоматически установить для всех переменных WithEvents значение Nothing. Казалось бы, это достаточно распространенное требование, но по какой-то причине Microsoft не включила такую функцию в VB.