繁体   English   中英

如何将匿名事件处理程序重构为适当的“委托”?

[英]How to refactor an anonymous event handler to a proper "delegate?"

好的,所以我知道有一些类似的问题,例如:

在 C# 中添加和删除匿名事件处理程序取消订阅匿名方法

但是我不明白代表的概念。

我开始在 a.Net Maui 应用程序中使用 Plugin.BLE。

扫描操作从一个按钮开始,然后超时(通过使用计时器)或通过再次按下按钮停止。

但是在我的按钮命令(MVVM)中,我有以下代码片段:

      ...
      adapter.DeviceDiscovered += (s, a) =>
      {
        if (a.Device.Name != null && a.Device.Name != String.Empty)
        {
          ...
        }
      };

      await adapter.StartScanningForDevicesAsync();
      ...

我注意到每次我按下按钮时,我都会得到两个发现的项目(我不确定为什么我会得到 2 个?)(这是来自 Pixel 5 模拟器)

这有点道理,因为我正在向同一个适配器添加另一个事件

所以我需要转换匿名 function

 adapter.DeviceDiscovered += (s, a) =>
 {
 }

进入非匿名 function,这样我就可以添加处理程序,然后在计时器停止或停止 function 时将其删除。

我不知道如何 go 关于这个,特别是在处理 s 和 a 时。

我将不胜感激任何指针,代码。

谢谢,G。

编辑:链接到 Plguin.BLE https://github.com/xabre/xamarin-bluetooth-le

好吧,我真的对 Visual Studio 感到惊讶。

在尝试创建函数和委托一段时间后,我注释掉了代码并输入了

adapter.DeviceDiscovered +=

Visual Studio 为我创建了代码的 rest 和事件处理程序。

所以我有:

adapter.DeviceDiscovered += Adapter_DeviceDiscovered;

...

private void Adapter_DeviceDiscovered(object s, Plugin.BLE.Abstractions.EventArgs.DeviceEventArgs a)
{
  Debug.WriteLine("Got here");
}

我将原始发件人更改为 s 并将原始 e 更改为 a 以匹配我使用的代码。

到目前为止,它似乎有效。

现在我需要做的就是弄清楚为什么这会被调用两次:.sigh:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM