MessageInterceptor中的一些延迟处理消息
本文关键字:延迟 处理 消息 MessageInterceptor | 更新日期: 2023-09-27 18:18:09
对不起,我的英语不是很好。
我是新的编程世界,并试图在windows移动6.5.3上使用messageinterceptor创建一个应用程序。但是当我发短信到我的手机,有大约30秒或更多的延迟之前的消息处理,无论是文本包含关键字或不。
在决定尝试制作自己的应用程序之前,我阅读了几个来源,但这些来源使用Windows窗体(GUI),而不是使用Windows窗体,我使其在控制台模式下运行。
下面是代码:using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using Microsoft.WindowsMobile.PocketOutlook.MessageInterception;
using Microsoft.WindowsMobile.PocketOutlook;
using Microsoft.WindowsMobile;
using System.IO;
namespace PenerimaPesan
{
class Program
{
static void Main(string[] args)
{
string applicationID;
applicationID = "tracker";
MessageInterceptor pesanmasuk = null;
pesanmasuk = new MessageInterceptor();
pesanmasuk.EnableApplicationLauncher(applicationID);
if (MessageInterceptor.IsApplicationLauncherEnabled(applicationID))
{
string keyword;
StreamReader key = new StreamReader(@"'Windows'conf.txt");
string data = key.ReadToEnd();
string[] isi = data.Split(new char[] { ''n' });
keyword = isi[1];
keyword = keyword.Replace(" ", "");
pesanmasuk = new MessageInterceptor(InterceptionAction.NotifyAndDelete, false);
pesanmasuk.MessageCondition = new MessageCondition(MessageProperty.Body, MessagePropertyComparisonType.StartsWith, ""+keyword);
pesanmasuk.MessageReceived += new MessageInterceptorEventHandler(pesanmasuk_MessageReceived);
}
}
static void pesanmasuk_MessageReceived(object sender, MessageInterceptorEventArgs e)
{
SmsMessage pesan = e.Message as SmsMessage;
if (pesan != null)
{
string perintah;
string[] command = pesan.Body.Split(new char[] { '.' });
perintah = command[1];
if (perintah == "helo")
/*do some Stuff*/
}
}
}
我从未使用过MessageInterceptor
,所以我决定尝试在我的应用程序中实现这段代码。为了测试它,我将Main重命名为Main2,然后清理它以匹配"my style"。
无论如何,当我尝试在using
块中包装MessageInterceptor
时,我遇到了错误-不是因为MessageInterceptor
不实现IDispose
,而是因为你已经声明了它的新实例。
看一下这段代码:
MessageInterceptor pesanmasuk = new MessageInterceptor();
pesanmasuk.EnableApplicationLauncher(applicationID);
if (MessageInterceptor.IsApplicationLauncherEnabled(applicationID)) {
string keyword;
StreamReader key = new StreamReader(@"'Windows'conf.txt");
string data = key.ReadToEnd();
string[] isi = data.Split(new char[] { ''n' });
keyword = isi[1];
keyword = keyword.Replace(" ", "");
pesanmasuk = new MessageInterceptor(InterceptionAction.NotifyAndDelete, false);
好的,在这里。停止。您创建了pesanmasuk
变量的新实例,设置属性,做了一些检查,从文本文件中处理数据,然后…
创建一个pesanmasuk
变量的新实例。
您之前的所有设置现在都被剔除。
我猜你的第一个实例正在运行,也许第二个实例必须等待第一个实例超时才能创建。
在这一点上,我有兴趣学习如何在MSDN上使用这个MessageInterceptor
,查看了那里的示例,并提出了这个[未经测试]版本:
static void Main2(string[] args) {
const string stackOverflowUrl = @"http://stackoverflow.com/questions/8520488/some-delay-processing-message-in-messageinterceptor";
string empty = String.Empty;
StreamReader key = new StreamReader(@"'Windows'conf.txt");
string data = key.ReadToEnd();
string[] lines = data.Split(new char[] { ''n' });
string keyword = lines[1].Replace(" ", empty);
string applicationID = "trackingApplication";
using (MessageInterceptor smsInterceptor = new MessageInterceptor(applicationID, false)) {
smsInterceptor.InterceptionAction = InterceptionAction.NotifyAndDelete;
smsInterceptor.MessageCondition = new MessageCondition(MessageProperty.Body, MessagePropertyComparisonType.StartsWith, empty + keyword);
smsInterceptor.MessageReceived += new MessageInterceptorEventHandler(Intercept_MessageReceived);
smsInterceptor.EnableApplicationLauncher(applicationID);
if (MessageInterceptor.IsApplicationLauncherEnabled(applicationID)) {
// Here, you'd need to launch your Form1 or enable some timer,
// otherwise the code will return immediately and the MessageInterceptor
// instance will be disposed of.
}
smsInterceptor.MessageReceived -= MessageInterceptorEventHandler;
}
}
static void Intercept_MessageReceived(object sender, MessageInterceptorEventArgs e) {
SmsMessage newMessage = e.Message as SmsMessage;
if (newMessage != null) {
Console.WriteLine("From: {0}", newMessage.From.Address);
Console.WriteLine("Body: {0}", newMessage.Body);
string[] command = newMessage.Body.Split(new char[] { '.' });
string line = command[1];
if (line == "helo") {
/*do some Stuff*/
}
}
}
我希望这对你有帮助,但请记住,我从来没有真正使用过这个控件,我的代码也没有经过测试。