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中的一些延迟处理消息

我从未使用过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*/
    }
  }
}

我希望这对你有帮助,但请记住,我从来没有真正使用过这个控件,我的代码也没有经过测试。