gpt4 book ai didi

xamarin - 使用 Rx 在 Xamarin 中桥接事件

转载 作者:行者123 更新时间:2023-12-01 13:27:37 25 4
gpt4 key购买 nike

目前,我只是使用普通的旧委托(delegate)/事件观察器模式来处理按钮上的点击事件。所以,我想我会去 Rx。

我的第一次尝试是球。我想我会选择您在 WinForms 示例中看到的最简单的重载:

Observable.FromEventPattern<EventArgs>(__navToTestButton, 'click');

但我遇到一个异常,Android 按钮没有点击事件。这是史诗般的反射失败。我猜我可能缺少一个 dll(太好了,另一个使我的 apk 更大的 dll)。

无论如何,我想我会继续进行不同的重载。现在看起来像这样:

navToTest = Observable.FromEventPattern<EventArgs>(
x => _navToTestButton.Click += _navToTestButton_Click,
x => _navToTestButton.Click -= _navToTestButton_Click
).ObserveOn(SynchronizationContext.Current);

还是失败了。没有异常(exception)。但是当我点击按钮时,只有蟋蟀和风滚草。我打算订阅吗?那会是什么样子,因为订阅似乎已经发生在那个重载中?

Xamarin 已经够棘手了,但 Rx 让它变得非常难。尤其是在没有太多人写博客的情况下(至少我的谷歌搜索没有找到什么有用的东西。我的代码基于我确实找到的一些零碎的东西。

谢谢

最佳答案

我没有在您的可观察对象上看到任何订阅:

反射(reflection):

Observable.FromEventPattern(aButton, "Click")
.Subscribe((obj) => Log.Debug(TAG, $"StackOverflow: {obj}"));

处理程序:

Observable.FromEventPattern(
handler => aButton.Click += handler,
handler => aButton.Click -= handler
)
.Subscribe(
(obj) => Log.Debug(TAG, $"StackOverflow: {obj}")
);

使双击可见:

var fromInterval = TimeSpan.FromMilliseconds(250);
var toInterval = TimeSpan.FromMilliseconds(500);

var buttonTapped = Observable.FromEventPattern(
handler => aButton.Click += handler,
handler => aButton.Click -= handler
);
var doubleTaps = buttonTapped
.TimeInterval()
.SkipWhile(t => t.Interval < toInterval)
.FirstAsync(t => t.Interval < fromInterval)
.Repeat();
doubleTaps
.Subscribe(
(obj) => Log.Debug(TAG, $"Double Tap: {obj}")
);

关于xamarin - 使用 Rx 在 Xamarin 中桥接事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47724477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com