用户
 找回密码
 立即注册

33

主题

96

帖子

1811

积分

金牌会员

Rank: 6Rank: 6

积分
1811
发表于 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的内容并未改变,在该语句上做断点,断点并不能被触发。

请检查。

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

Peter,

谢谢您的测试和回复。

大杰米。
使用道具 举报 回复 支持 反对
发表于 2019-9-10 15:49:50
您好:
询问技术部,若发送成功则不触发回调。目前你可以没有接收到回调这判断发送成功,若接收到回调则判断发送失败。
谢谢
使用道具 举报 回复 支持 反对
发表于 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)   
      {
          //  成功后的代码段
      }

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

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

Peter,

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

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

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

您好:
WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。所以之前的WriteData方法成功并不能判断蓝牙设备真的接收到信息。设备发送了信息,但是否发送成功需要蓝牙设备的交互,若成功发送,DataReceived(接收蓝牙后发生)事件会接收到信息,可以此判断。
谢谢
使用道具 举报 回复 支持 反对
发表于 2019-9-23 16:43:15
peter.pan 发表于 2019-9-23 10:36
您好:
WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。所以之前的Wri ...

Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息(因为我的协议中,我发送的消息本身就是应答,不需要对方对此消息再次对它进行答复)。如果没有回调,这个应该如何实现?以前我可以直接在回调部分执行我的后续操作,现在没有办法做了。如果我简单的这么写:
    bluetooth1.WriteData(Data);
    my_codes;

而我的 my_codes 中是要启动别的 窗体,在这种情况下,前面的WriteData() 是不会被执行的。

我想知道是处于什么考虑,开发团队删掉了WriteData()的回调,这个是很有用处的啊。请您反映一下? 看能不能把它加回来。

谢谢
大杰米
使用道具 举报 回复 支持 反对
发表于 2019-9-23 16:45:41
本帖最后由 bigjimmy8257 于 2019-9-24 08:16 编辑

Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息(因为我的协议中,我发送的消息本身就是应答,不需要对方对此消息再次对它进行答复)。如果没有回调,这个应该如何实现?以前我可以直接在回调部分执行我的后续操作,现在没有办法做了。如果我简单的这么写:
    bluetooth1.WriteData(Data);
    my_codes;

而我的 my_codes 中是要启动别的 窗体,在这种情况下,前面的WriteData() 是不会被执行的。

我想知道是处于什么考虑,开发团队删掉了WriteData()的回调,这个是很有用处的啊。请您反映一下? 看能不能把它加回来。或者把WriteData()加一个非异步阻塞式的执行选项。

谢谢
大杰米
使用道具 举报 回复 支持 反对
发表于 2019-9-24 10:15:06
bigjimmy8257 发表于 2019-9-23 16:45
Peter 您好,

我需要的功能是在通过WriteData() 发送数据后立刻启动后续的操作,而不会等待对端回送的消息 ...

您好:
已了解你的需求,提交技术部。会着手添加WriteData()发送成功回调。
但还是强调下WriteData方法只是发送设备发送蓝牙信息是否成功,并不是蓝牙设备接收信息是否成功。
所以添加WriteData的成功回调,并不代表蓝牙设备接收成功。
谢谢
使用道具 举报 回复 支持 反对
12下一页
发新帖
您需要登录后才可以回帖 登录 | 立即注册