Wstrzymanie wykonywania programu Windows Phone C#

0

Witam, orientuje się ktoś jak mogę wstrzymać wykonywanie programu na określony czas w Windows Phone. Chce co np 1 sekunde przesuwać narysowany kwadrat robiąc to w pętli, ale jednocześnie tak żeby zdarzenia pochodzące od buttonów były przyjmowane. Albo niech chociaż mi ktoś wyjaśni jak ogólnie to zrobić w c#, już nie koniecznie w windows phone.

0

Użyj do tego osobnego wątku albo timera, który będzie działał obok wątku obsługującego zdarzenia systemowe.

0

Nie jestem pewien ale Windows Phone chyba nie jest wielowątkowy. A z tym timerem to jak to powinno dokładniej wyglądać??

0

Jest wielowątkowy, nie jest tylko wielozadaniowy (przynajmniej dla "zwykłego" programisty). Po pierwsze - używasz XNA czy Silverlighta? Wnioskuję, że skoro piszesz o buttonach to używasz SL - poczytaj o Storyboardach i animacji. Nie musisz tworzyć nowych wątków, ani używać timerów(których na całe szczęście nie ma na WP7).
Ogólnie klasy z jakimi musisz się zapoznać to Storyboard oraz do animacji: DoubleAnimation. Do przemieszczania kwadratu musisz użyć RenderTransform i rzutować do jakieś konkretnej klasy np. CompositeTransform lub TranslateTransform. W XAMLu musisz te właściwości doczepić i przypisać im początkową wartość.

0

To mi zadałeś;), przyznam się że nie wszystko jest jasne, ale postaram się odrobić lekcję bo wyglądasz jakbyś się znał;). I chyba jesteś pierwszą osobą, którą spotkałem tu na forum która pisała coś pod Phone, bo to chyba mało popularne. Dzięki za odpowiedź.

0

Pomijając fakt że przykład ze strony mi nie działa http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard(VS.95).aspx to tak się zastanawiam jak to zrobić później żeby sterować tą animacją? Na pewno idzie to zrobić? Mam zamiar zrobić snake.

0

Jeśli masz zamiar tworzyć grę, to XNA będzie lepszym wyborem. Bo do tworzenia gier właśnie służy.
Jeśli jednak chcesz zostać w Silverlight, to mam wrażenie, że do tworzenia czegoś takiego gotowe animacje niekoniecznie będą dobrze się nadawać.

W takim wypadku musisz użyć wątków. WP7 jest wielowątkowy, jest nawet wieloprocesowy, ale nie pozwala na uruchomienie dwóch aplikacji "3rd party" naraz. Na razie. To jedyne ograniczenie. Dodatkowo, Silverlight bardzo usilnie nalega na używanie wielowątkowości, niekiedy niejawnej - przez operacje asynchroniczne. Zalecenia tworzenia aplikacji na WP7 nakazują, by interfejs użytkownika się nie blokował, a był pokazywany zawsze jakiś postęp wykonywania operacji. Strasznie wkurzające do oprogramowania niekiedy, ale dobre dla użytkownika.

Potrzebujesz dwóch wątków - jeden, wątek główny, będzie odbierał zdarzenia od naciśnięcia klawiszy i przekazywał je do drugiego wątku, którego zadaniem będzie przesuwanie kwadracika. Z czego drugi nie będzie mógł bezpośrednio odwołać się i odrysować obiektu na formatce z tego co pamiętam, tylko trzeba będzie zrobić pośredniczącego delegata.

w XNA z kolei tak naprawdę masz jeden wątek i jedną pętlę gry - ale nie masz przycisków (kontrolek) - w takim wypadku łatwiej było by zrobić Snake który zmienia kierunek na dotknięty przez użytkownika kraniec ekranu na przykład (gdzie będą rysowane wirtualne przyciski).

0

Sneake... Do takiej małej gry bez bez różnicy w zasadzie czego użyjesz - użyj tej technologii którą lepiej znasz. W XNA również da się tworzyć gry 2D w oparciu o sprite'y - dochodzi jednak więcej "mechaniki" o jakiej pisał Ktos. W SL też masz dostęp do każdej klatki animacji - przyjrzyj się klasie CompositionTarget i zdarzeniu Rendering. Ze swojej strony polecam też darmową książkę o WP7:
http://blogs.msdn.com/b/microsoft_press/archive/2010/08/02/free-ebook-petzold-s-programming-windows-phone-7-special-excerpt-2.aspx
Znajdziesz w niej sporo gotowych przykładów - w sam raz na początek.

0

Dziękuje wszystkim za odpowiedź, porady były bardzo cenne;). Zdecydowałem się ostatecznie na pisanie w XNA. W związku z tym że nie miałem pojęcia o XNA zrobiłem to wg tutorialu ze strony: http://blogs.msdn.com/b/coding4fun/archive/2008/10/06/8976852.aspx . Chciałem dorobić HighScore ze strony http://xnaessentials.com/tutorials/highscores.aspx, ale mam problem z tą linią:

XmlSerializer serializer = new XmlSerializer(typeof(HighScoreData));
        serializer.Serialize(stream, data);

Jakiej metody użyć zamiast XMLSerializer żeby zamienić tą strukturę na XML?

1 użytkowników online, w tym zalogowanych: 0, gości: 1