用户
 找回密码
 立即注册

30

主题

83

帖子

1548

积分

金牌会员

Rank: 6Rank: 6

积分
1548
发表于 2019-9-9 16:33:01
Smobiler的专家,

我今天在4.9的内测版上使用蓝牙的WriteData事件时,发现它的回调事件无法被触发。以下面的代码为例:

                bluetooth1.WriteData("Hello", (abj, args) =>
                {
                    label1.Text = "data sent";
                    if (args.isError == true)
                        Toast(args.error);
                });


执行上面代码,接收方可以收到数据包“Hello”, 但是在发送方, label1的内容并未改变,在该语句上做断点,断点并不能被触发。

请检查。

谢谢
大杰米。
使用道具 举报 回复
您好:
初步测试,4.9版本确实没有触发回调,已提交技术部
谢谢
使用道具 举报 回复 支持 反对
发表于 2019-9-10 12:31:32
peter.pan 发表于 2019-9-9 17:40
您好:
初步测试,4.9版本确实没有触发回调,已提交技术部
谢谢

Peter,

谢谢您的测试和回复。

大杰米。
使用道具 举报 回复 支持 反对
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判断发送失败。
谢谢
使用道具 举报 回复 支持 反对
发表于 2019-9-11 15:33:39
本帖最后由 bigjimmy8257 于 2019-9-11 15:35 编辑
peter.pan 发表于 2019-9-10 15:49
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判 ...

Peter,

谢谢技术部的回复,但是基于这个逻辑,我如何实现在发送成功后调用相应的代码呢?

如果我把成功后要执行的代码放在 WriteData() 后面,那么WriteDate()就不会被执行。原因应该是之前提到,异步执行是要求所有代码都执行完成后才会执行。这样一来根本就无从判断是否 WriteData()是否成功。
例如:
     flag_success = true;
     bluetooth1.WriteData("Something", (obj, args) =>
      {
           flag_success = false;
      });

      if(flag_success)   
      {
          //  成功后的代码段
      }

也许我想得不周全,能给一个如何判断发送成功的示例吗?

大杰米。
使用道具 举报 回复 支持 反对
peter.pan 发表于 2019-9-10 15:49
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判 ...

Peter,

技术部有进一步的反馈吗?

大杰米
使用道具 举报 回复 支持 反对
bigjimmy8257 发表于 2019-9-19 15:19
Peter,

技术部有进一步的反馈吗?

您好:
WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。所以之前的WriteData方法成功并不能判断蓝牙设备真的接收到信息。设备发送了信息,但是否发送成功需要蓝牙设备的交互,若成功发送,DataReceived(接收蓝牙后发生)事件会接收到信息,可以此判断。
谢谢
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册