Tôi đã làm việc trên cùng một dự án ngay từ Giáng sinh năm 2008. Tôi đã được yêu cầu mang nó từ một Ứng dụng Console (chỉ in các câu lệnh theo dõi), Ứng dụng Windows. Chắc chắn, đó là tốt. Điều duy nhất là có các phần của ứng dụng có thể mất vài phút đến gần một giờ để chạy. Tôi cần phải đa luồng để hiển thị trạng thái người dùng hoặc lỗi. Nhưng tôi không biết bắt đầu từ đâu.Đa luồng: cách cập nhật giao diện người dùng để biểu thị tiến trình
Tôi đã xây dựng một giao diện người dùng nhỏ trong WPF. Nó rất cơ bản, nhưng tôi muốn mở rộng nó như tôi cần. Ứng dụng hoạt động bằng cách chọn nguồn, chọn điểm đến và nhấp vào bắt đầu. Tôi muốn một hộp danh sách để cập nhật khi quá trình diễn ra. Nhiều trong cùng một cách SQL Server cài đặt, mỗi bước có một dấu kiểm màu xanh lá cây bằng tên của nó khi nó hoàn thành.
Làm thế nào để một newbie bắt đầu đa luồng? Tôi nên kiểm tra thư viện nào? Mọi lời khuyên sẽ được đánh giá cao.
p.s. Tôi hiện đang đọc về thư viện này, http://www.codeplex.com/smartthreadpool
@ Martin: Đây là làm thế nào ứng dụng của tôi được xây dựng:
- Động cơ: Chạy tất cả các thành phần chính trong trật tự được xác định trước
- Excel: Thư viện tôi đã viết để bọc COM để mở/đọc/đóng/lưu Sổ làm việc
- Thư viện: Thư viện hiểu các loại định dạng sổ làm việc khác nhau (5 tổng)
- Lớp học kinh doanh: Các lớp học tôi đã dịch để dịch dữ liệu Excel và chuẩn bị cho Access
- Db Thư viện: Một thư viện tôi đã viết trong đó sử dụng ADO.NET để đọc dữ liệu truy cập
- AppSettings: bạn sẽ có được ý tưởng
- Serialier: Lưu dữ liệu trong trường hợp ứng dụng sụp đổ
tôi sử dụng mọi thứ từ LINQ đến ADO.NET để lấy dữ liệu, chuyển đổi nó, và sau đó xuất nó.
yêu cầu chính của tôi là tôi muốn cập nhật giao diện người dùng của tôi cho thấy tiến trình
@Frank: Điều gì sẽ xảy ra nếu một cái gì đó trong Worker Bối cảnh ném một ngoại lệ (xử lý hay cách khác)? Đơn đăng ký của tôi nhận được thông báo như thế nào?
@Eric Lippert: Có, tôi đang điều tra điều đó ngay bây giờ. Trước khi tôi làm phức tạp mọi thứ.
Hãy cho tôi biết nếu bạn cần thêm thông tin. Hiện tại tôi đã chạy ứng dụng này từ một bài kiểm tra đơn vị, vì vậy tôi đoán callig nó là một ứng dụng giao diện điều khiển là không đúng sự thật. Tôi sử dụng Resharper để làm điều này. Tôi là người duy nhất ngay bây giờ sử dụng ứng dụng này, nhưng tôi muốn có một giao diện hấp dẫn hơn
Trước khi bạn thêm một loạt phức tạp đa luồng, bạn có thể xem xét cách bạn viết ứng dụng của mình để đáp ứng với người dùng trong khi vẫn đang được tạo luồng đơn. Nó là hợp lý để thay đổi thuật toán của bạn để họ có thể làm một chút tính toán, trả lại thực tế là họ đã tiến bộ, để cập nhật giao diện người dùng, và sau đó tiếp tục tính toán nơi họ rời đi? –
Nếu bạn đang đối phó với một API cơ sở dữ liệu sẽ rất khó khăn.Người dùng sẽ có mạng chậm, lỗi mạng, thời gian chờ tra cứu tên. DB sẽ bận vào các thời điểm vv Xử lý với I/O mạng thô có thể ở chế độ không chặn/không đồng bộ. Nhưng đi qua ADO.NET, đó không thực sự là một lựa chọn khả thi .. – nos
@noselasd: Tôi chỉ sử dụng ADO.NET một chút, tôi không sử dụng nó làm cửa hàng phụ trợ của mình. – Chris