Я никогда не использовал 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*/
}
}
}
Надеюсь, это поможет, но имейте в виду, что я никогда не использовал этот элемент управления, и мой код не был протестирован.