2012-06-22 33 views
5

Tôi có một chương trình được viết bằng VB6 đọc một tệp văn bản dài và thực hiện thao tác rất dài. Tôi cũng đã triển khai thanh tiến trình, nhưng vấn đề của tôi là, sau khi chương trình của tôi nói "Không phản hồi" và nó bắt đầu phản hồi lại khi nhiệm vụ được hoàn thành.Dừng Ứng dụng VB6 Trả lời

Làm cách nào để xóa sự cố 'Không phản hồi' này?

+1

Chào mừng bạn đến với StackOverflow. Bạn có thể muốn đọc các câu hỏi thường gặp và các trang liên quan về [nghi thức] (http://stackoverflow.com/faq#etiquette), và cố gắng không gửi hoặc sử dụng văn bản in đậm một cách không cần thiết. – Deanna

+1

Bạn có thể quan tâm đến các câu hỏi liên quan [hủy bỏ một quy trình chạy dài trong Vb6] (http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0-without- doevents) và [sử dụng các luồng trong VB6] (http://stackoverflow.com/questions/383162/to-use-thread-in-programming-in-vb6) và [tạo một sự kiện giết cho một ứng dụng Vb6] (http: //stackoverflow.com/questions/727386/making-ac-sharp-kill-event-for-a-vb6-app). Tiêu đề có thể không có vẻ liên quan, nhưng câu trả lời sẽ hữu ích cho bạn. Họ giải thích một số cách khác nhau mà bạn có thể làm xử lý nền trong VB6 – MarkJ

Trả lời

7

Windows/Explorer sẽ thay đổi quy trình thành trạng thái "Không phản hồi" khi quá lâu mà không xử lý bất kỳ thư nào. Trong VB6, điều này sẽ xảy ra khi chạy một đoạn mã dài mà không cần gọi DoEvents.

Thật không may, VB6 không dễ dàng thực hiện nhiều chủ đề, do đó, bạn nên chọn định kỳ DoEvents trong khi thao tác. Lý tưởng nhất, điều này sẽ chỉ sau khi cập nhật vị trí thanh tiến trình.

Khi thực hiện việc này, bạn sẽ cần phải cẩn thận để bảo vệ chống lại tái nhập. Điều này là đủ dễ dàng bằng cách vô hiệu hóa các điều khiển khi hoạt động dài bắt đầu và kích hoạt lại chúng khi nó kết thúc. Nếu bạn muốn cho phép họ hủy, bạn sẽ cần phải sử dụng giá trị boolean mà bạn đã đặt trong sự kiện nhấp vào nút hủy và kiểm tra sau gọi DoEvents.

+0

+1 Như đã thảo luận [ở đây] (http://stackoverflow.com/questions/155517/cancelling-a-long-running-process-in-vb6-0- không-doevents) – MarkJ

1

Bạn có thể gọi DoEvents trong thời gian hoạt động dài nhưng hãy cẩn thận vì nó có various caveats được liên kết với nó.

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