некоторая задержка обработки сообщения в MessageInterceptor - PullRequest
0 голосов
/ 15 декабря 2011

Извините, мой английский не совсем хорошо.

Я новичок в мире программирования и пытался создать приложение с помощью messageinterceptor на Windows Mobile 6.5.3.но когда я отправляю текстовое сообщение на телефон, перед обработкой сообщения задерживается примерно 30 секунд или более, текстовое сообщение, содержащее ключевые слова, или нет.

Я прочитал несколько источников, прежде чем попытаться сделатьсобственное приложение, но эти источники используют Windows Form (GUI), вместо Windows Form, я заставляю его работать в режиме консоли.

вот код:

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*/
            }
        }
    }

1 Ответ

2 голосов
/ 15 декабря 2011

Я никогда не использовал MessageInterceptor, поэтому я решил попробовать реализовать этот код в своем приложении. Чтобы проверить это, я переименовал Main в Main2 , а затем очистил его, чтобы соответствовать «моему стилю».

В любом случае, я столкнулся с ошибками, когда попытался обернуть MessageInterceptor в блок using - не потому, что 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.

Все ваши предыдущие настройки теперь удалены.

Я предполагаю, что ваш первый экземпляр запущен, и, возможно, второй экземпляр должен ожидать истечения времени ожидания первого экземпляра, прежде чем его можно будет создать.

На данный момент мне интересно узнать, как использовать эту MessageInterceptor на MSDN , посмотрел пример и предложил эту [непроверенную] версию:

static void Main2(string[] args) {
  const string stackOverflowUrl = @"/4971019/nekotoraya-zaderzhka-obrabotki-soobscheniya-v-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*/
    }
  }
}

Надеюсь, это поможет, но имейте в виду, что я никогда не использовал этот элемент управления, и мой код не был протестирован.

...