1

我在 Windows 手机上有一个基本的 SMS 拦截应用程序,目前这是一个连接 MessageInterceptor 类的 MessageReceived 事件的控制台应用程序。

一旦我完成了我的程序运行到完成,我的手机就会显示“忙碌的圆圈”,直到我做其他事情,但是当我收到与我的过滤器匹配的短信时,我的事件处理程序仍然会被触发。

我尝试了其他一些方法;

  • Codeplex 的 ManagedServicesWM 项目 - 这对于我需要的东西来说过于复杂,结果证明是一个带有 Thead.Sleep(200) 的无限循环,因此对于我的应用程序来说也是一个电池电量的腰部。
  • 做一个 Console.ReadLine(); - 但似乎 WM 控制台应用程序的标准输入为空,所以这什么也没做。
  • 使用表单应用程序 - 这只是让我的基本应用程序更加复杂和多线程,没有任何收获,并且给了我一个无用的表单。

但是这些替代品似乎都没有我的悬挂控制台应用程序那么好,但这感觉不像是正确的答案。

所以我想知道是否有人对实现这种风格的应用程序有其他想法,如果我发现在某些时候我的应用程序将被 Windows 内存管理器结束?

4

3 回答 3

1

我不知道我理解这个问题。我知道您想要一个没有 UI 的应用程序来监控传入的 SMS,但不一定是您遇到的确切问题。

我希望一般程序如下所示:

static class Program
{
    static MessageInterceptor interceptor;

    static void Main()
    {
        Thread listener = new Thread(new ThreadStart(
            delegate
            {
                interceptor = new MessageInterceptor(InterceptionAction.Notify, false);
                interceptor.MessageReceived += new MessageInterceptorEventHandler(OnMessageReceived);
            }));
        listener.IsBackground = true;
        listener.Start();

        EventWaitHandle eh = new EventWaitHandle(false, EventResetMode.AutoReset, "MyShutdownEventName");

        while (!eh.WaitOne(1000, true))
        {
            // do nothing
        }

        interceptor.Dispose();
    }

    static void OnMessageReceived(object sender, MessageInterceptorEventArgs e)
    {
        DoSomething();
    }
}

“但是等等,你那里有一个无限循环,这会耗尽我的电池”你说?几乎不。您认为 WinForms 应用程序如何工作?他们有一个消息泵,令人惊讶的是,它是一个无限循环。我怀疑每秒醒来一次是否会对您的功率状况产生任何影响。

如果您真的担心,您可以将超时更改为 Timeout.Infinite,但是在代码审查中,任何使用 Infinite 都会立即受到我的负面评价。无限等待非常、非常、非常、非常罕见地适用于驱动程序之外(即使那样我也很少使用它们),因为无限等待告诉调度程序你可以永远不会关闭。

于 2009-09-09T18:40:21.240 回答
1

经过几个月的使用,我还没有看到我的控制台应用程序被 Windows 内存管理器终止,除了重置后启动应用程序时的“忙圈”之外,一切似乎都正常工作。

我的电池电量似乎也没有受到影响,这比一些无限循环、ManagedServicesWM 和 OpenNetCF 选项要好,这些选项会大大缩短电池寿命。

于 2010-01-06T05:53:53.613 回答
0

您可以尝试使用 OPENNETCF - http://www.opennetcf.com/library/sdf/html/8ef93ad6-d839-2c70-695d-04e2679c0c27.htm

于 2009-09-09T12:39:01.893 回答