2011-07-15 34 views
7

Tôi đang cố gắng tự động hóa GUI của ứng dụng bên ngoài bằng C# /. NET 4.0Xác định xem ứng dụng có bị chặn/bận không?

Ứng dụng đang được tự động (AUT) là một ứng dụng VB6.

Khi thực hiện hành động hoặc nhấp vào nút, AUT đôi khi dành rất nhiều thời gian chờ DB trả lời. Khi ứng dụng đang chờ kết quả DB, bản thân ứng dụng không hoạt động (không đăng ký nhiều CPU), nhưng nó bị chặn (bạn không thể nhấp hoặc tương tác với nó).

-Đến nay, tôi đã thử nhìn vào con trỏ chuột (đồng hồ cát) làm chỉ báo, nhưng đôi khi ứng dụng bị chặn nhưng con trỏ là bình thường. Vì vậy, điều này không đáng tin cậy.

-Tôi đã thử xem quy trình chính của AUT cho TotalProcessorTime (biện pháp này nếu ứng dụng là IDLE hoặc BUSY), nhưng như tôi đã nói, đôi khi ứng dụng là IDLE và vẫn bị chặn.

Vì vậy, tôi muốn đưa băng vào ngăn xếp trải nghiệm của đám đôngBộ lọc để xem liệu có ai đã biết cách xử lý điều đó hay không và/hoặc nếu bạn có bất kỳ ý tưởng nào về cách đạt được điều này.

Cảm ơn

EDIT:

Tôi đã chơi xung quanh, và chỉ phát hiện ra điều gì đó.

Trong khi AUT bị chặn, nó không đáp ứng với đầu vào bàn phím hoặc chuột. Tuy nhiên, nếu tôi gửi tin nhắn WM_LBUTTONCLICK đến cửa sổ, tôi có thể xác nhận rằng các thư đang được xử lý (và giao diện người dùng thay đổi).

Vì vậy, tôi đoán rằng họ đang cố ý chặn ứng dụng trong khi thực hiện cuộc gọi DB.

+0

Giao diện người dùng có bị vô hiệu hóa không? Chuỗi giao diện người dùng chính có bị chặn trên chuỗi công việc không? Bạn có thấy cửa sổ bóng mờ nếu bạn cố gắng tương tác với các ứng dụng? –

+0

Bạn không thể tương tác với giao diện người dùng chính, tuy nhiên tôi không nghĩ rằng chuỗi giao diện người dùng chính đang chặn, vì bạn không thấy bất kỳ "Bóng mờ" nào khi bạn cố gắng tương tác với giao diện người dùng đó. Nó không làm gì cả. Và tất cả các điều khiển/giao diện người dùng vẫn "bật". – DanyO

+0

Kiểm tra với Spy ++ xem cửa sổ chính có bị tắt hay không. Nếu hàng đợi tin nhắn đang được bơm, và bạn không thể gọi các hành động UI, thì một cái gì đó trong AUT phải được vô hiệu hóa tôi đoán. –

Trả lời

3

Bạn có thể kiểm tra hay không UI của ứng dụng đó được đáp ứng:

Lấy ví dụ quá trình cho ứng dụng đó và kiểm tra tài sản Responding của nó. như:

//To get the process instance 
Process application = null; 
foreach (var process in Process.GetProcesses()) 
{ 
    if (process.ProcessName == "The Process Name") 
    { 
     application = process; 
     break; 
    } 
} 

//to check if the process UI is not responding 
if (application.Responding) 
{ 
    // 
} 

Edit: Bạn có thể thay đổi thời gian chờ sử dụng bởi application.Responding séc this.

+0

Tôi vừa xác minh, và tại một điểm mà ứng dụng dường như bị chặn, ứng dụng. Trả về TRUE, vì vậy chúng tôi không thể sử dụng ... – DanyO

+0

@ DanyO: có lẽ quá trình của bạn không có 'MainWindowHandle', [msdn] (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.responding.aspx)' Nếu quá trình này không có một MainWindowHandle, thuộc tính này trả về true.', nếu không thuộc tính này sẽ hoạt động "AFAIK", ví dụ: kiểm tra [this] (http://msdn.microsoft.com/en-us/library/aykwfbdh (v = vs.71) .aspx) –

+0

Tôi vừa xác minh và quá trình này có một MainWindowHandle hợp lệ.Từ tài liệu, không "Process.Responding" chỉ áp dụng cho các ứng dụng được coi là treo? Ứng dụng tôi đang thử nghiệm không thực sự treo, nó chỉ bị chặn cho đến khi nó nhận được phản hồi từ cơ sở dữ liệu. – DanyO

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