22/12/2009 23:41
El Bruno
[VSTS2010] Reactive Extension Generator (una must have tool para que nuestro código quede mas simple)

Buenas,
ya sé que seguramente estarás trabajando con Visual Studio 2010 y que después de tirar miles de líneas de código, cuando haces esos momentos de reflexión introspectiva (un refactoring mental) siempre piensas como puedes mejorar una u otra cosa. Pues esta herramienta sirve para ver como plantear de manera diferente algo a lo que estamos muy acostumbrados: el trabajo con eventos.
Utilizando esta extensión para Visual Studio 2010, es posible aprovechar toda la potencia de LINQ para gestionar los eventos propios de .Net, ya que la misma se encarga de generar un proxy sobre un ensamblado .Net que expone una interfaz síncrona sobre los eventos (asíncronos) para trabajar con la misma (no sé si proxy es la palabra correcta, creo que no)
Dicho de otra manera, sobre una de las referencias de un proyecto, la seleccionamos y desplegando el menú contextual seleccionamos [Create Reactive Extensions]

y un nuevo ensamblado se crea automáticamente, donde se expone el proxy sobre los eventos del mismo.

Una vez generado el siguiente código autoexplica el funcionamiento de Rx
var mouseMoves = from mm in mainCanvas.Reactive().MouseMove
let location = mm.EventArgs.GetPosition(mainCanvas)
select new { location.X, location.Y };
var mouseDiffs = mouseMoves
.Skip(1)
.Zip(mouseMoves, (l, r) => new { X1 = l.X, Y1 = l.Y, X2 = r.X, Y2 = r.Y });
var mouseDrag = from _ in mainCanvas.Reactive().MouseLeftButtonDown
from md in mouseDiffs.Until(
mainCanvas.Reactive().MouseLeftButtonUp)
select md;
var mouseSub = mouseDrag.Subscribe(item =>
{
var line = new Line
{
Stroke = Brushes.LightSteelBlue,
X1 = item.X1,
X2 = item.X2,
Y1 = item.Y1,
Y2 = item.Y2,
StrokeThickness = 5
};
mainCanvas.Children.Add(line);
});
Más información:
Saludos @ Morfeo’s place
El Bruno
Pagina de producto: http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx
Descarga: http://visualstudiogallery.msdn.microsoft.com/en-us/0791089a-4570-4f21-b5ee-78aba7e80651
Archivado en: Visual Studio Team System,VSTS,Visual Studio 2010,VisualStudioGallery
Comparte este post: