thể trùng lặp:
How to block Winforms UI while background thread is runninglàm thế nào để khóa GUI ứng dụng trong C# Winform
tôi đang sử dụng một C# WinForm ứng dụng
Tôi có một nút Save trên màn hình nơi dữ liệu của màn hình được lưu vào cơ sở dữ liệu.
điều gì xảy ra, khi người dùng nhấp vào ứng dụng nút chuyển đến cơ sở dữ liệu và lưu dữ liệu. phải mất một thời gian.
nhưng có nghĩa là trong khi nếu sử dụng một lần nữa nhấn vào nút Save the kiện Click được đánh bắt và khi Click đầu tiên trở lại mã chính (sau khi tiết kiệm cơ sở dữ liệu) sự kiện bắt bị sa thải ..
Nói tóm lại sự kiện click bị bắt và bị sa thải khi luồng trả về từ sự kiện đầu tiên (Tôi đã thử kịch bản bật/tắt nút).
Làm cách nào để ngăn chặn hành vi này.
Kính trọng, Akhil
@Jalal: Tôi đã thử mã này với một số sửa đổi như
private readonly object _userActivityLocker = new object();
private void btnSave_Click(object sender, EventArgs e)
{
if (System.Threading.Monitor.TryEnter(_userActivityLocker))
{
//note that any sub clicks will be ignored while we are here
try
{
DateTime dt = DateTime.Now;
Thread.Sleep(2000);
Debug.Print("FirstClick {0} Second Click {1}",dt.ToLongTimeString(), DateTime.Now.ToLongTimeString());
//here it is safe to call the save and you can disable the btn
Application.DoEvents();
}
finally
{
System.Threading.Monitor.Exit(_userActivityLocker);
//re-enable the btn if you disable it.
}
}
}
nhưng khi tôi nhanh chóng bấm vào nút (i kiểm tra với 5 lần nhấp chuột nhanh chóng) 5 nhấp chuột sự kiện đã bị sa thải và cửa sổ bảng điều khiển đang hiển thị
FirstClick 1:30:22 PM Thứ hai Nhấp 1:30:24 PM FirstClick 1:30 : 24 PM Thứ Hai Nhấp vào 1:30:26 PM FirstClick 1:30:26 PM Thứ hai Nhấp vào 1:30:28 PM FirstClick 1:30:28 PM Thứ hai Nhấp 1:30:30 PM FirstClick 1:30:30 PM Thứ Hai Nhấp vào 1:30:32 PM
truy cập vào liên kết này http://stackoverflow.com/questions/648255/how-to-block-winforms-ui-while-background-thread-is-running – Vamsi
Lạ ... À nên đã làm việc – V4Vendetta
@ V4Vendetta: đây là ** dự kiến ** sẽ xảy ra .. xem câu trả lời của tôi để biết thêm thông tin. –