好的,我知道有一些类似的问题,如:
添加和删除匿名事件处理程序c#中的取消订阅匿名方法
但是我不理解委托的概念。
我开始使用这个插件。. net Maui应用中的BLE
扫描操作从一个按钮开始,然后要么超时(通过使用定时器),要么再次按下按钮停止。
然而,在我的按钮命令(MVVM)我有以下代码片段:
...
adapter.DeviceDiscovered += (s, a) =>
{
if (a.Device.Name != null && a.Device.Name != String.Empty)
{
...
}
};
await adapter.StartScanningForDevicesAsync();
...
我注意到,每次我按下按钮,我得到两个更多的发现项目(我不知道为什么我得到2个吗?)(这是从Pixel 5模拟器)
这在某种程度上是有意义的,因为我正在向同一个适配器添加另一个事件!
所以我需要转换匿名函数
adapter.DeviceDiscovered += (s, a) =>
{
}
变成一个非匿名函数,这样我就可以添加处理程序,然后在计时器停止或停止函数时删除它。
我不知道该怎么做,尤其是在处理s和a的时候。
我很感激任何指针,代码。
谢谢,g .
编辑:链接到插件。BLE https://github.com/xabre/xamarin-bluetooth-le嗯,我真的被Visual Studio惊呆了。
在尝试创建函数和委托一段时间后,我注释掉了代码并输入
adapter.DeviceDiscovered +=
和visual studio为我创建了其余的代码和事件处理程序。
所以我有:
adapter.DeviceDiscovered += Adapter_DeviceDiscovered;
...
private void Adapter_DeviceDiscovered(object s, Plugin.BLE.Abstractions.EventArgs.DeviceEventArgs a)
{
Debug.WriteLine("Got here");
}
我将原来的发送者更改为s,将原来的e更改为a,以匹配我使用的代码。
到目前为止,它似乎有效。
现在我需要做的就是弄清楚为什么这个被调用两次!:叹息。:)