C# – > VB.Net中的RaiseEvent

我在VB.Net中使用TweetInvi很开心,不幸的是我将此代码转换为VB.Net存在问题。 我还是初学者,我试图获得有关RaiseEvent的一些信息,但我无法做到。 这是代码。 我想在按钮事件中运行它:

var stream = Stream.CreateFilteredStream(); stream.AddTrack("tweetinvi"); stream.MatchingTweetReceived += (sender, args) => { Console.WriteLine("A tweet containing 'tweetinvi' has been found; the tweet is '" + args.Tweet + "'"); }; stream.StartStreamMatchingAllConditions(); 

谢谢。

事实上,你不是要提出一个事件,而是订阅一个事件。 遗憾的是,将代码转换为VB.NET时出现的IntelliSense错误有点误导。

就事件而言,C#的+=运算符等于Delegate.Combine() ,它将另一个委托添加到事件的订阅者列表(事件处理程序列表)。 Delegate只是一个包含另一个方法指针的类。 委托用于提供一种简单的方法来传递和通过代码调用方法。

引用文档

+=运算符还用于指定将响应事件而调用的方法; 这种方法称为事件处理程序。 在此上下文中使用+=运算符称为订阅事件

要订阅VB.NET中的事件,您必须使用AddHandler语句 ,其语法是:

 AddHandler ,  

从而:

 AddHandler stream.MatchingTweetReceived, _ Sub(sender As Object, args As EventArgs) Console.WriteLine("A tweet containing 'tweetinvi' has been found; the tweet is '" & args.Tweet & "'") End Sub 

– 末尾的下划线( _ )只是告诉编译器继续下一行的一种方式。 在较新版本的VB.NET中,这不是必需的,但是有些人仍然使用VS 2008及以下…我也希望在那里使它更清楚哪些语句在一起而哪些不一致。