【问题标题】:Hooking up events and what to do with app afterwards连接事件以及之后如何处理应用程序
【发布时间】:2010-01-06 13:53:53
【问题描述】:

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

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

我尝试了其他一些方法;

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

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

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

【问题讨论】:

  • 你能澄清一下这个问题吗?确切地说,要弄清楚您要的是什么有点困难。我猜您希望您的应用程序位于内存中并响应所有发送到您手机的 SMS 消息,但您不希望等待光标像控制台应用程序那样出现,并且您还希望确保您的应用程序没有被 Windows Mobile 关闭。这是正确的吗?

标签: windows-mobile compact-framework sms console-application


【解决方案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 的行为都会立即受到我的负面评价。无限等待非常、非常、非常、非常罕见地适用于驱动程序之外(即使那样我也很少使用它们),因为无限等待告诉调度程序你可以永远不会关闭。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 那么,您的解决方案到底是什么?
    • 一个悬挂的控制台应用程序,它连接所需的事件然后“退出”
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    相关资源
    最近更新 更多