2010-06-28 68 views
13

Trong chương trình của tôi với giao diện người dùng trong WinForm. Tôi đặt con trỏ đến một đồng hồ cát ngay trước khi khởi chạy một phương thức trong ThreadPool.Vấn đề đồng hồ cát trong ứng dụng WinForm

Mã của tôi trong thread UI để thiết lập con trỏ trông như thế này:

Application.UseWaitCursor = true; 

Khi phương pháp này xong, tôi quay trở lại giao diện người dùng chủ đề đến thiết lập con trỏ đến trường hợp bình thường.

Application.UseWaitCursor = false; 

Vấn đề của tôi là con trỏ ở lại đồng hồ cát cho đến khi tôi không di chuyển chuột. Đó là một chút đáng lo ngại nếu người dùng chờ đợi vào cuối của hành động mà không di chuyển chuột.

Bất cứ ai cũng có thể giúp tôi?

Jérôme

Trả lời

6

Tôi không thể tạo lại hành vi này? Việc này ổn với tôi.

Một điều cần lưu ý tuy nhiên nếu bạn sử dụng cách tiếp cận Control.Cursor = Cursors.WaitCursor là nó thường được sử dụng như sau:

this.Cursor = Cursors.WaitCursor

Trong đó sẽ xuất hiện để làm việc tốt, tuy nhiên, this đề cập dưới dạng vì vậy nếu người dùng di chuyển chuột đến một điều khiển khác, ví dụ như một TextBox sau đó chuột không hiển thị con trỏ chờ.

Điều này có thể gây nhầm lẫn cho người dùng. Hoặc có thể gây ra một số vấn đề nếu người dùng tiếp tục làm việc trên một thứ khác khi Ứng dụng đang bận làm công việc khác.

+1

Cuối cùng tôi có đã thay đổi Thuộc tính Con trỏ trên Biểu mẫu chính thay vì Application.UseWaitCursor và hành vi của con trỏ của tôi là những gì tôi đã mong đợi. Tôi không biết vấn đề là gì ... – RedPaladin

0

Đặt con trỏ theo cách thủ công. Đó là những gì tôi làm.

+0

Bạn có thể làm như thế nào? – RedPaladin

+0

'control.Cursor = Cursors.Busy' – leppie

+0

Tôi nghĩ rằng nó phải là' control.Cursor = Cursors.WaitCursor' – codingbadger

12

Thêm một cách:

Cursor.Current = Cursors.WaitCursor; 

Khi hoàn tất, chỉ cần thay đổi con trỏ trở lại:

Cursor.Current = Cursors.Default; 
13

Trên thực tế, có nhiều cách để làm điều đó, mà tôi tìm thấy ở đâu đó sau giờ làm nghiên cứu vấn đề này.

Thật không may, đó là một hack.

Dưới đây là phương pháp tôi viết để xử lý sự cố.

/// <summary> 
    /// Call to toggle between the current cursor and the wait cursor 
    /// </summary> 
    /// <param name="control">The calling control.</param> 
    /// <param name="toggleWaitCursorOn">True for wait cursor, false for default.</param> 
    public static void UseWaitCursor(this Control control, bool toggleWaitCursorOn) 
    { 
     ... 

     control.UseWaitCursor = toggleWaitCursorOn; 

     // Because of a weird quirk in .NET, just setting UseWaitCursor to false does not work 
     // until the cursor's position changes. The following line of code fakes that and 
     // effectively forces the cursor to switch back from the wait cursor to default. 
     if (!toggleWaitCursorOn) 
      Cursor.Position = Cursor.Position; 
    } 
+0

Cảm ơn lời khuyên hữu ích nhất. Trên thực tế Cursor.Position = Cursor.Position; là đủ cho tôi để thêm vào. – jing

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