Webcast - Rx - Einstieg in die Programmierung asynchroner und event-basierter Anwendungen

by Gregor Biswanger 22. Juli 2011 06:27

silverlight-webcast

Microsoft DevLabs hat ein Framework veröffentlicht, mit dem asynchrone und event-basierte Vorgänge reaktiv mittels LINQ gehandhabt werden können. Dieses Framework nennt sich Reactive Extensions (Rx), ist auch unter der Bezeichnung 'LINQ to Events' bekannt und kann kostenlos heruntergeladen werden. Mit ihm steht ein mächtiges Werkzeug bereit, das gerade bei asynchronen und eventbasierten Vorgängen seine Stärke ausspielen kann. Der Webcast bietet eine Einführung in die reaktive Programmierung mittels Rx.

image

http://www.microsoft.com/germany/msdn/webcasts/library.aspx?id=1032487439

 

Übungen zum Webcast

Zu diesem Webcast habe ich ein paar Übungen vorbereitet. Somit stehen für Silverlight und WPF folgende Aufgaben zum Lösen bereit:

Rx unter Silverlight

Das Doppelklick-Feature kommt erst mit Silverlight 5. Bei der ersten Aufgabe geht es darum, eine einfache Doppelklick-Logik selbst zu implementieren:

   1:  namespace SilverlightDoubleClick
   2:  {
   3:      public partial class MainPage : UserControl
   4:      {
   5:          private readonly DispatcherTimer _doubleClickTimer;
   6:   
   7:          public MainPage()
   8:          {
   9:              InitializeComponent();
  10:   
  11:              _doubleClickTimer = new DispatcherTimer();
  12:          }
  13:   
  14:          private void BnClickMe_Click(object sender, RoutedEventArgs e)
  15:          {
  16:              if(_doubleClickTimer.IsEnabled)
  17:              {
  18:                  // TODO: Erst bei einem Doppelklick, darf dieser Code ausgeführt werden.
  19:                  // Hinweis! Verwende den _doubleClickTimer als Hilfe.
  20:                  MessageBox.Show("Doppelklick ausgeführt!");
  21:              }
  22:          }
  23:      }
  24:  }

 

Bei der zweiten Aufgabe muss die Doppelklick-Logik mittels Rx gehandhabt werden:

 

   1:  namespace SilverlightRxDoubleClick
   2:  {
   3:      public partial class MainPage : UserControl
   4:      {
   5:          public MainPage()
   6:          {
   7:              InitializeComponent();
   8:   
   9:              // Hinweis! Verwende FromEventPattern und Buffer.
  10:              Observable.Never<object>();
  11:          }
  12:   
  13:          public void ButtonClick()
  14:          {
  15:              // TODO: Erst bei einem Doppelklick, darf dieser Code ausgeführt werden.
  16:              MessageBox.Show("Doppelklick ausgeführt!");
  17:          }
  18:      }
  19:  }

Rx unter WPF

Diese Übungsaufgabe ist schon etwas für Fortgeschrittene Entwickler. Hier soll erst auf eine Gültige PLZ Eingabe überprüft werden und dann soll die Abfrage zum Ort stattfinden. Das ganze Szenario auch noch vom ViewModel aus.

 

image

 

   1:  namespace WpfRxViewModel.ViewModel
   2:  {
   3:      public class DefaultViewModel : INotifyPropertyChanged
   4:      {
   5:          private string _textInput;
   6:          public string TextInput
   7:          {
   8:              get { return _textInput; }
   9:              set
  10:              {
  11:                  _textInput = value;
  12:   
  13:                  OnPropertyChanged("TextInput");
  14:              }
  15:          }
  16:   
  17:          private string _city;
  18:          public string City
  19:          {
  20:              get { return _city; }
  21:              set
  22:              {
  23:                  _city = value;
  24:   
  25:                  OnPropertyChanged("City");
  26:              }
  27:          }
  28:   
  29:          public event PropertyChangedEventHandler PropertyChanged;
  30:   
  31:          public DefaultViewModel()
  32:          {
  33:              // TODO: Bei der Eingabe vom Text soll überprüft werden ob es sich hierbei um eine gültige PLZ handelt. 
  34:              // Wenn Ja, soll erst dann automatisch der Stadtname abgefragt und dem Property City überreicht werden.
  35:              // Hinweis: Bei der Eingabe der TextBox für die PLZ, wird jeweils das PropertyChanged Event gefeuert.
  36:              // GetCityName kann in der Linq abfrage eingebunden werden.
  37:              Observable.Never<string>();
  38:          }
  39:   
  40:          public Func<string, string> GetCityName = zip =>
  41:                                                        {
  42:                                                            var zipRepository = new ZipRepository();
  43:                                                            return zipRepository.GetCityFromZip(zip);
  44:                                                        };
  45:   
  46:          public void OnPropertyChanged(string propertyname)
  47:          {
  48:              PropertyChangedEventHandler handler = PropertyChanged;
  49:              if (handler != null) handler(this, new PropertyChangedEventArgs(propertyname));
  50:          }
  51:      }
  52:  }

 

Ich bin auf jeden Fall schon auf Eure Lösungen gespannt, die Ihr mir gerne per E-Mail zukommen lassen könnt. Die besten Lösungen werden mit einem eigenen Blog-Post dann veröffentlicht.

 

Viel Spaß!

Euer Gregor



Wenn ihnen der Artikel gefallen hat oder er für sie hilfreich war, bitten "kicken" sie ihn.
kick it on dotnet-kicks.de

Kommentare

Kommentar schreiben


(Zeigt dein Gravatar icon)  

  Country flag

biuquote
  • Kommentar
  • Live Vorschau
Loading



Powered by BlogEngine.NET 1.4.5.0
Theme by Extensive SEO

Über den Autor

Gregor Biswanger

Microsoft MVP für Client App Dev
XING

Gregor Biswanger (Microsoft MVP für Client App Dev) ist freier Consultant, Trainer, Autor und Speaker.


Seine Schwerpunkte liegen im Bereich der .NET-Architektur, agilen Prozessen und XAML. Er veröffentlichte vor kurzem seine DVD´s mit Video-Trainings zum Thema „Meine erste Windows 8 App“, „Windows Store Apps mit XAML und C#“ und „WPF 4.5 und Silverlight 5“ bei Addison-Wesley von video2brain.


Biswanger ist auch im Auftrag von Intel GmbH als Technologieberater für die Intel Developer Zone aktiv und ist Leader bei der Ingolstädter .NET Developers Group (INdotNET). 

 

Video über mich:
http://www.youtube.com/watch?v=mx_6SiiLxjk


Basta! 2011 Speaker

CLIPer

MCTS
Windows SharePoint Services 3.0 – Application Development (MCTS)