2013-11-13 4 views
0

У меня есть программа для Windows Mobile 6.5, которую я хочу вызвать вызов веб-сервера каждые десять минут. Но событие, похоже, не всегда называется. Я создал простую программу для проверки при срабатывании событий.Windows mobile threading.timer в unattenededmode

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

Когда я нажимаю кнопку питания на устройстве, таймер прекращает выполнение.

Imports System.Threading 
Imports Win32 

Public Class Form1 
    Dim time As String = "" 
    Dim tmrUploadTimerThread As Timer 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
     CoreDLL.PowerPolicyNotify(PPNMessage.PPN_UNATTENDEDMODE, -1) 
     tmrUploadTimerThread = New Timer(New TimerCallback(AddressOf Timer_Worker), Nothing, 10000, 10000) 
    End Sub 

    Private Sub Timer_Worker() 
     time = Now & Environment.NewLine & time 
    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     TextBox1.Text = time 
    End Sub 

    Private Sub Form1_Closed(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Closed 
     CoreDLL.PowerPolicyNotify(PPNMessage.PPN_UNATTENDEDMODE, 0) 
     Me.Dispose() 
     Application.Exit() 
    End Sub 

End Class

Я получил класс Win32 от Windows Mobile Power Management. Bellow является кодом для PowerPolicyNotify:

[DllImport("CoreDLL")] 
public static extern int PowerPolicyNotify(
     PPNMessage dwMessage, 
     int option 
// DevicePowerFlags); 
); 
+0

Есть ли какая-то конкретная причина, почему вы не используете простой таймер? –

+0

Да, простой таймер только галочки, когда они находятся на форме, в которой включен таймер, который не будет работать в приложении, которое я разрабатываю. – Blag

ответ

0

Таймеры и еще заморожены, когда они находятся в режиме ожидания. Режимы мощности часто смешиваются. Ваш автоматический режим, как представляется, является приостановленным режимом в автоматическом режиме, дисплей отключается, но система все еще работает и т. Д. В режиме приостановки процессы и потоки заморожены, и только аппаратное или временное событие может разбудить устройство. Лучше всего использовать событие уведомления, они также запускаются, если устройство находится в режиме ожидания.

См. Здесь http://www.hjgode.de/wp/2011/12/23/windows-mobile-tasker2-runs-and-stops-applications-periodically/ и http://www.hjgode.de/wp/2009/07/14/howto-run-an-application-periodically/ и http://www.hjgode.de/wp/2013/05/13/mobile-development-manage-the-event-db-what-wakes-up-your-device/ для образцов кода в C++.

+0

Спасибо, Вы, где правильное решение для меня, чтобы система запускала задачу, хотя я использовал CeRunAppAtTime, а не событие. – Blag

+0

Событие, которое я написал, представляет собой событие API уведомлений. CeRunAppAtTime ничего не делает, кроме как ввести расписание в базу данных событий уведомлений. – josef