Windows Mobile C# Application - pierwsza aplikacja WM w C#
Dodany: 12:43, czwartek, 20 maja 2010
Celem tego artykułu będzie przedstawienie możliwości jakie oferuje nam programowanie w .NET Compact Framework - czyli C# na platformy mobilne. Przy pomocy Microsoft Visual Studio 2008 postaram się przedstawić projektowanie prostej aplikacji na Windows Mobile 6.0 Professional, której zadaniem będzie wyświetlanie ścieżki do pliku, do katalogu, nazwy pliku wykonywalnego oraz aktualnego czasu.
Projektowanie tej aplikacji będzie odbywać sie w programie Microsoft Visual Studio 2008, który w trakcie jej realizacji będzie korzystał w symulatora WM 6.0, który jest dostarczany wraz z Windows Mobile 6.0 SDK. Wraz z tym oprogramowaniem dostarczany jest także pakiet przydatnych programów (m.in.: Cellular Emulator, Hopper, FakeGPS), jednak o ich przydatności napisze w nieokreślonej przyszłości. Po uruchomieniu MVS 2008 tworzymy nowy projekt na aplikacje mobilne w języku C# (File->New->Project), następnie wybieramy platforme (Visual C#->Smart Device) podajemy jego nazwę (w moim przypadku: SimpleWMApp) oraz potwierdzamy wybór. W kolejnym oknie wybieramy dokładnie telefon, na który ma powstać aplikacja (później można to zmienić, jednak w tym momencie interesuje nas WM 6.0 Professional) wersje .NET CF 3.5 oraz Device Application w celu stworzenia aplikacji okienkowej. W wyniku tego otrzymamy pusty projekt, który po skompilowaniu i uruchomieniu nie będzie nic robił.
Pierwsze, co musimy w tym momencie zrobić, to zmiana jednej z właściwości głównego okna aplikacji, a dokładniej MinimizeBox na false (X zamieni się w "ok"). Jest to spowodowane tym, że po uruchomieniu emulatora i zamknięciu aplikacji przy pomocy krzyżyka (X) program dalej będzie uruchomiony i będzie zajmował pamięć telefonu, jednak nie będzie on aktywny. W tym momencie, gdy po wyjściu z emulatora i zapisaniu jego stanu będziemy próbowali kolejny raz skompilować i uruchomić program, pojawi nam się błąd opisujący, że plik programu jest obecnie używany przez inny proces. Jeżeli tak się stało, należy w ustawieniach telefonu wyłączyć dany proces (Start->Settings->System->Memory->Running Programs).
Kolejnym krokiem jest dodanie kontrolek obsługujących naszą aplikacje. W polu Design naszej aplikacji umieszczamy 3 kontrolki typu TextBox i odpowiednio zmieniamy ich nazwy (pole Name na tbPath, tbAppFile i tbAppDir), oraz zmieniamy właściwość ReadOnly na true. Kolejnym krokiem jest dodanie kontrolki StatusBar i zmiany jej nazwy na sbTime (w tym polu będzie wyświetlana aktualna data i czas) oraz usunięcie napisu z pola Text. Ostatnim elementem jest kontrolka odpowiedzialna za odliczanie czasu - Timer, którą tak jak wcześniejsze należy przeciągnąć do pola edytora, oraz zmienić jej nazwe na timer. Aplikacja po uruchomieniu powinna wyglądać mniej więcej jak na załączonym obrazku.
W tym momencie do w pełni gotowej aplikacji niezbędny jest już tylko kod C#. Pierwszym elementem, którym się zajmiemy jest zdarzenie odpowiedzialne za ładowanie okna aplikacji.
private void Form1_Load(object sender, EventArgs e)
{
this.Text = "SimpleWMApp";
timer.Interval = 1000;
timer.Enabled = true;
sbTime.Text = "Data: " + DateTime.Now.ToShortDateString() + " Godzina: " + DateTime.Now.ToLongTimeString();
String path, appFile, appPath;
path = System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase;
appFile = AppDomain.CurrentDomain.ToString();
appPath = path.Remove(path.LastIndexOf(appFile), appFile.Length);
tbPath.Text = path;
tbAppFile.Text = appFile;
tbAppDir.Text = appPath;
}
Na początku tego kodu ustawiany jest tekst w oknie głównym aplikacji. Następnie czas wystąpienia zdarzenia tyknięcia timera, oraz jego włączanie. Kolejnym krokiem jest wypisanie aktualnej daty i czasu w kontrolce StatusBar. Ostatnim krokiem w tym zdarzeniu jest ustalanie za pomocą dostępnych bibliotek ścieżki do pliku, folderu oraz nazwy aplikacji w Windows Mobile 6.0 oraz wypisywanie ich w odpowiednich polach TextBox.
Po każdorazowym odliczeniu 1 sekundy przez timer występuje zdarzenie Tick opisane poniżej.
private void timer_Tick(object sender, EventArgs e)
{
sbTime.Text = "Data: " + DateTime.Now.ToShortDateString() + " Godzina: " + DateTime.Now.ToLongTimeString();
}
Zadaniem tego zdarzenia jest wyświetlanie daty i czasu w kontrolce StatusBar tak, aby co sekunde (1000ms zadeklarowane wcześniej) były one aktualizowane.
Ważnym elementem, który należy tutaj dopowiedzieć jest to, że w momencie, gdy osoba pisząca program ustawiła właściwość okna głównego Minimize na true, musi każdorazowo po schowaniu okna (deaktywacji) wywołać zdarzenie Deactivate, którego zadaniem jest wyłączyć timer (timer.Enabled=false), a po aktywowaniu okna (Activate) ponownie włączać timer (druga możliwość to wyłączenie eventu timer_Tick). Spowodowane jest to tym, że gdy użytkownik końcowy zdeaktywuje aplikacje, to kod odpowiedzialny za zdarzenie odliczenia 1s będzie w dalszym ciągu wykonywany, co spowoduje zużycie baterii i pamięci (w tej aplikacji w małym stopniu, jednak gdy np.: używamy GPS, to jest to już spore zużycie).
Poniżej został załączony zrzut ekranu prezentujący w pełni działającą aplikacje. Po wiecej informacji zapraszam do działu kontakt.



