2009-11-18 32 views
8

Có một số quảng cáo khá mới xung quanh Reactive Framework mới trong .NET 4.0. Trong khi tôi nghĩ rằng tôi undestood khái niệm cơ bản của nó tôi không hoàn toàn được bán ra rằng nó là hữu ích. Bạn có thể đưa ra một ví dụ tốt (đó là một nửa dễ hiểu) mà hoàn toàn cho thấy sức mạnh và sự hữu ích của Rx? Hiển thị điều gì đó làm cho cuộc sống dễ dàng hơn nhiều khi thực hiện với Rx.Khuôn khổ phản ứng cho các ví dụ .NET chứng minh tính hữu dụng của nó

+0

Xem một ví dụ tại đây: http://stackoverflow.com/questions/1596158/good-introduction-to-the-net-reactive-framework/1749252#1749252 – Benjol

+1

Khi nào đang đẩy hữu ích? Khi kéo là hữu ích? –

Trả lời

9

Đây là ví dụ nhanh. Lập trình một thao tác kéo theo cách khai báo đầy đủ, sử dụng LINQ cho các sự kiện.

//Create an observable with 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), 
          }; 

Và vẽ một đường từ startpos để pos hiện

//Subscribe and draw a line from start position to current position 
      mouseDragPoints.Subscribe 
       (item => 
       { 
        //Draw a line from item.Startpos to item.CurrentPos 
       } 
       ); 

Như bạn có thể thấy, không có xử lý sự kiện trên tất cả các nơi, cũng không biến boolean để quản lý nhà nước.

Nếu bạn tò mò về những phương thức GetEventName() này, hãy đề nghị bạn đọc toàn bộ bài viết này và tải xuống mã nguồn và phát cùng với nó.

Read it here and play with the source >>

+0

Câu trả lời rất chi tiết nhưng không dễ hiểu. Tôi sẽ phải đọc một số ... – bitbonk

+0

Câu hỏi đặt ra là đưa ra một ví dụ. Dưới đây là một bài đọc hay nếu bạn muốn chạm vào các khái niệm cơ bản - http://amazedsaint.blogspot.com/2009/11/systemreactive-or-net-reactive.html – amazedsaint

0

tôi đã viết một bản demo bước-by-step trên blog của tôi thời gian gần đây: http://blog.andrei.rinea.ro/2013/06/01/bing-it-on-reactive-extensions-story-code-and-slides/

tôi về cơ bản việc xây dựng một ứng dụng nhỏ trong WPF với Rx và Bing Tìm kiếm:

enter image description here

Ứng dụng sẽ đợi cho đến khi bạn ngừng nhập và sau đó thực hiện tìm kiếm không đồng bộ và trình bày kết quả. Nếu trước khi kết quả đến bạn phát hành một tìm kiếm khác, nó sẽ tự động thả tìm kiếm hiện tại.

Bạn có thể bắt buộc tìm kiếm (bỏ qua thời gian chờ) bằng cách nhấn ENTER hoặc "Go!" và có thể dừng tìm kiếm liên tục bằng cách nhấn nút Xóa. Có một chỉ báo bận và một số xử lý lỗi (ví dụ như trường hợp mạng bị hỏng).

chủ đề chính bao gồm:

  • Tạo một thể quan sát được từ một sự kiện (TextChanged, Button.Click vv)
  • Async đại biểu (async tìm kiếm)
  • mở rộng TakeUntil
  • mở rộng DistinctUntilChanged (bao gồm tùy chỉnh Bằng)
  • Mở rộng hợp nhất
  • Mở rộng ga
  • Quan sát tiện ích mở rộng (để đồng bộ hóa chuỗi giao diện người dùng)

.. và hơn thế nữa!

Các vấn đề liên quan