- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为 WM 编写一个应用程序来处理传入的 SMS 事件。我尝试在传递 SmsMessage 的地方使其成为多线程(使用 ThreadPool.QueueWorkItem)。但是,我注意到当我这样做时,程序只会处理第一个短信事件——之后,设备根本没有收到任何短信!但是当程序退出时,所有错过的短信都到了。
基于此,我猜想我的问题的答案是 SmsMessage 对象不是线程安全的,尽管实际上并没有迹象表明情况确实如此。
那么如果我们想尝试线程化一个 SmsMessage 对象怎么办?今晚我将通过制作 SmsMessage 的副本(可能通过使用带项目 ID 的构造函数)来尝试,或者我将创建一个空的并手动复制字段。
发现:
我缩小了问题范围。当我将 SmsMessage 复制到我自己的对象中时,我能够让所有内容在后台线程中工作,注意不要引用任何 SmsMessage 的对象。短信顺利通过。
但是,当我设置 MessageIntercepter 来启动应用程序,并在该应用程序实例中使用后台线程发送 SMS 时,该应用程序可以正常工作,但在它退出我的代码后崩溃并显示“There was an error in yourapp.exe”并询问我是否要将崩溃数据发送到 MS。我永远无法弄清楚那个错误是什么,但我发现如果我从启动应用程序的同一个线程发送 SMS,一切正常。
因此,只要您不传递/使用 SmsMessage,在应用程序打开时线程化就可以了当应用程序在外部启动时线程化 = 没问题,只要您不在另一个线程中发送 SmsMessage。
最佳答案
根据MSDN Library (Microsoft.WindowsMobile.PocketOutlook.SmsMessage) :
Any public static (Shared in Visual Basic) members of this type are thread-safe. Any instance members are not guaranteed to be thread-safe.
所以你的问题的答案是:它不是线程安全的。
编辑:我很高兴你设法让这个东西工作。我很确定这是 PocketOutlook 库深处的一些竞争条件或非托管资源处理问题。
就个人而言,我认为您应该将所有与消息传递相关的代码保存在一个线程中,从 MessageInterceptor 创建到它被释放的那一刻,并且只传递您编写的对象,这样您就知道它们不会有狡猾的非托管依赖(这就是我认为的那种)——这应该足以避免这些问题。
无论如何,拥有 2 个 SMS 拦截器线程有什么意义?这不像一部手机可以同时收到 2 条短信。
关于c# - SmsMessage 不是线程安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/421801/
我使用以下代码创建广播(来自 this article ): public class IncomingSms extends BroadcastReceiver { // Get the o
我目前正在开发 SmsReceiver 服务,该服务会检查短信发送者的地址,如果该号码与我的数据库中的号码匹配,我就可以处理该消息。 但问题是, getOriginatingAddress() 方法给
我正在为 WM 编写一个应用程序来处理传入的 SMS 事件。我尝试在传递 SmsMessage 的地方使其成为多线程(使用 ThreadPool.QueueWorkItem)。但是,我注意到当我这样做
我尝试在模拟器上运行应用程序,但遇到了一些奇怪的崩溃,例如: java.lang.NoSuchMethodError: android.telephony.SmsMessage. 当然这或多或少应该是
我应该将什么作为第二个参数 传递给 createFromPdu() 方法, SmsMessage currentMessage = SmsMessage.createFromPdu((byte[])
正如我的问题标题所暗示的,我正在寻找一种将隐藏文本嵌入到 SMS 消息中的方法。我不确定这是否可行,并且花了相当多的时间在 http://developer.android.com/reference
在 Android 中,如果我想读取传入的 SMS,我会使用 SmsMessage.createFromPdu,但这会返回一个 SmsMessage 数组。这是为什么?为什么不只是一个 SmsMess
在Android中有一个很棒的方法SmsMessage.calculateLength你可以给它一个字符串,它会检测它的编码并返回一个数组,你可以在其中找到 1 条短信剩余的字符数,或者字符串中有多少
这是我的 BroadcastReceiver 的样子: public class IncomingSMSListener extends BroadcastReceiver { private sta
我正在创建出站 SMS 通信,需要设置一个 cookie,以便我可以跟踪对话线程。我正在使用 Twilio-charp 客户端,但没有看到设置 cookie 或 http header 的方法。这是可
我正在尝试使用以下代码读取收到的短信,它在 API 级别 23 以下工作,但在 API 级别 23 中,createFromPdu 方法已弃用。在谷歌文档中它有一个 alternate method但
目标:(注意:选择的答案生成一个 GSM (3gpp) PDU)CDMA (3gpp2) please refer here 创建一个可以传递给 SmsMessage.createFromPdu(by
这是单独文件中的一个类 import 'package:sms/sms.dart'; class SmsReader { SmsMessage sms; dynamic messageRead
我是一名优秀的程序员,十分优秀!