MySQL также использует MVCC по умолчанию при использовании таблиц InnoDB: http://dev.mysql.com/doc/refman/5.0/en/innodb-multi-versioning.html
Пару дней назад у меня действительно были похожие мысли. Мы начали наш собственный «101 Rx Samples» как сообщение на форуме Rx MSDN, но с тех пор переместили его в формат Wiki. Не стесняйтесь заходить и добавлять свои собственные образцы!
Для начала - Вот простое приложение для рисования, поэтому что когда пользователь перетаскивает, мы рисуем красную линию от исходного положения мыши вниз до текущего местоположения, а также синюю точку в текущем местоположении. Это результат моего взлома на прошлой неделе на Rx
И вот исходный код.
//A draw on drag method to perform the draw
void DrawOnDrag(Canvas e)
{
//Get the initial position and dragged points using LINQ to Events
var mouseDragPoints = from md in e.GetMouseDown()
let startpos=md.EventArgs.GetPosition(e)
from mm in e.GetMouseMove().Until(e.GetMouseUp())
select new
{
StartPos = startpos,
CurrentPos = mm.EventArgs.GetPosition(e),
};
//Subscribe and draw a line from start position to current position
mouseDragPoints.Subscribe
(item =>
{
e.Children.Add(new Line()
{
Stroke = Brushes.Red,
X1 = item.StartPos.X,
X2 = item.CurrentPos.X,
Y1 = item.StartPos.Y,
Y2 = item.CurrentPos.Y
});
var ellipse = new Ellipse()
{
Stroke = Brushes.Blue,
StrokeThickness = 10,
Fill = Brushes.Blue
};
Canvas.SetLeft(ellipse, item.CurrentPos.X);
Canvas.SetTop(ellipse, item.CurrentPos.Y);
e.Children.Add(ellipse);
}
);
}
Прочтите мой пост с дальнейшими пояснениями здесь и Загрузите исходный код здесь
Надеюсь, это поможет
Вот мой вариант примера перетаскивания Уэса Дайера для Windows Forms (я бы сделал EnableDragging методом расширения, возможно):
public Form2()
{
InitializeComponent();
EnableDragging(pictureBox1);
EnableDragging(button1);
EnableDragging(this);
}
private void EnableDragging(Control c)
{
// Long way, but strongly typed.
var downs = from down in Observable.FromEvent<MouseEventHandler, MouseEventArgs>(
eh => new MouseEventHandler(eh),
eh => c.MouseDown += eh,
eh => c.MouseDown -= eh)
select new { down.EventArgs.X, down.EventArgs.Y };
// Short way.
var moves = from move in Observable.FromEvent<MouseEventArgs>(c, "MouseMove")
select new { move.EventArgs.X, move.EventArgs.Y };
var ups = Observable.FromEvent<MouseEventArgs>(c, "MouseUp");
var drags = from down in downs
from move in moves.TakeUntil(ups)
select new Point { X = move.X - down.X, Y = move.Y - down.Y };
drags.Subscribe(drag => c.SetBounds(c.Location.X + drag.X, c.Location.Y + drag.Y, 0, 0, BoundsSpecified.Location));
}