2009-01-26 41 views
8

Tôi có một ứng dụng bảng điều khiển đang thực hiện một số đồng bộ hóa dài với máy chủ FTP.
Ứng dụng bảng điều khiển khác chuẩn bị hệ thống tệp cục bộ với một số tệp được cập nhật cần thiết.
Sau đó, điều thứ hai sẽ chờ cho người đầu tiên hoàn thành trước khi trao đổi tên thư mục cuối cùng để nó hiển thị trên web.Gửi tin nhắn từ một ứng dụng bàn điều khiển đang chạy đến một ứng dụng khác đang chạy trên bàn điều khiển khác

Tôi đã tìm kiếm cách tốt nhất để làm cho ứng dụng đồng bộ hóa giao tiếp với ứng dụng thứ hai mà nó đã hoàn thành công việc của nó. Có vẻ như Using Data Copy for IPC là giải pháp phù hợp nhất cho việc này.

Câu hỏi là hai lần:

  • Am tôi phải không? Có cách nào tiến thẳng hơn để đạt được kết quả tương tự không?
  • Có cách nào (.net) được quản lý để thực hiện việc này không?

Trả lời

10

Nếu tất cả những gì bạn cần là thông báo cho một ứng dụng mà người kia đã hoàn thành nhiệm vụ của mình, cách dễ nhất là sử dụng EventWaitHandle được đặt tên. Đối tượng được tạo trong trạng thái unsignaled của nó. Ứng dụng đầu tiên đợi trên tay cầm và ứng dụng thứ hai báo hiệu xử lý khi nó hoàn thành công việc của nó. Ví dụ:

// First application 
EventWaitHandle waitForSignal = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle"); 

// Here, the first application does whatever initialization it can. 
// Then it waits for the handle to be signaled: 
// The program will block until somebody signals the handle. 
waitForSignal.WaitOne(); 

Điều đó thiết lập chương trình đầu tiên để chờ đồng bộ hóa. Ứng dụng thứ hai cũng không kém phần đơn giản:

// Second app 
EventWaitHandle doneWithInit = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle"); 

// Here, the second application initializes what it needs to. 
// When it's done, it signals the wait handle: 
doneWithInit.Set(); 

Khi ứng dụng thứ hai gọi Set, nó báo hiệu sự kiện và ứng dụng đầu tiên sẽ tiếp tục.

+0

Điều này nghe có vẻ tốt. Sẽ kiểm tra ngay lập tức và trở lại đây :) –

+0

Hoạt động như một nét duyên dáng :) –

5

tùy chọn phổ biến khác cho IPC bao gồm:

  • Named Pipes
  • Remoting (NET)
  • WCF

Nếu bạn chỉ cần đồng bộ hóa, bạn có thể xem xét một Semaphore hoặc đối tượng Mutex. Có các lớp tồn tại trong không gian tên System.Threading cho .NET. Nếu bạn tạo các phiên bản có tên của chúng, thì chúng sẽ áp dụng cho toàn bộ máy.

+0

Tôi không biết một nửa số từ bạn đang nói, nhưng sẽ thực hiện một số nghiên cứu :); 1UP để giao cho tôi từ khóa :) –

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