我有一个代码片段,有人在c#中使用Rx编写了一个使用Observable的代码。用于事件处理的fromventpattern。
下面是我使用Rx
的现有代码private void RegisterToDigitFocusEvents(int index, TextBox digit)
{
Observable.FromEventPattern<RoutedEventHandler, RoutedEventArgs>(
h => digit.GotFocus += h,
h => digit.GotFocus -= h)
.SubscribeToElement(digit,
_ => this.ResetDigit(digit, index),
error => this.Log().Error("Observing digit GotFocus", error),
() =>
{
/* Do nothing on complete */
});
}
我不允许在我的项目中使用Rx。我查阅了FromEventPattern的文档,我无法清楚地理解在没有Rx的情况下编写相同代码的纯。net等效性是什么
这是我尝试的转换,你可能知道它没有像预期的那样工作
//Global index so that it can be used across functions
int index1;
private void RegisterToDigitFocusEvents(int index, TextBox digit)
{
digit.GotFocus += digit_GotFocus;
index1 = index;
}
void digit_GotFocus(object sender, RoutedEventArgs e)
{
this.ResetDigit(sender as TextBox, index1);
}
正如您注意到的,我没有编写代码来取消注册事件处理程序。我不知道该把逻辑放在哪里。
我是一个初学者的Rx。澄清一下——我不想重新实现Rx为我提供的整个可观察模式,我只想编写一个与第一个代码片段等效的函数,而不使用Rx,纯。net事件。如果能在没有Rx的情况下编写本文的第一个代码片段,我将非常感激。在我看来,这是完全等价的:
private void RegisterToDigitFocusEvents(int index, TextBox digit)
{
RoutedEventHandler gotFocusHandler = (s, e) =>
{
try
{
this.ResetDigit(digit, index)
}
catch (Exception error)
{
this.Log().Error("Observing digit GotFocus", error);
}
};
digit.GotFocus += gotFocusHandler;
}
你真的应该扩展这段代码来处理窗体关闭时处理程序的分离,但以上应该是基本的要求。
如果我误解了这个问题,请告诉我。