2010-02-03 29 views
14

Làm cách nào để giải quyết lỗi này?Cách khắc phục "Tài nguyên được yêu cầu đang được sử dụng. (Ngoại lệ từ HRESULT: 0x800700AA)"

"Tài nguyên được yêu cầu đang được sử dụng. (Ngoại lệ từ HRESULT: 0x800700AA)".

Điều này xuất hiện trong khi điều hướng đến một trang web khác bằng cách sử dụng điều khiển WebBrowser trong C# .NET. Tại sao?

+0

Bạn đang sử dụng Trình duyệt Web như thế nào? Bạn có đang điều hướng qua tương tác của người dùng hoặc theo lập trình không? Bạn có thể đăng một số mã cho biết cách điều hướng được khởi tạo không? –

+0

khi nào bạn mắc bệnh? Có hộp thư nào trên chính trình duyệt không? –

+1

DocumentComplete được nâng lên một lần cho mỗi khung hình trước một lần cuối cùng cho trang. có khung nào trên trang không? –

Trả lời

11

Điều khiển WebBrowser được coi là đang được xử lý hoặc bất kỳ hộp thoại chặn nào từ điều khiển hiện đang mở (bao gồm menu ngữ cảnh, cảnh báo Javascript, hộp thoại đăng nhập NTLM, v.v.). Bạn có thể sử dụng thuộc tính WebBrowser.IsBusy để phát hiện các trạng thái này.

Nếu do hành động điều hướng hiện tại chưa hoàn thành, bạn có thể cố gắng dừng điều hướng hiện tại (nếu bạn thực sự muốn dừng khi trang chưa được tải xong) hoặc thêm điều hướng mới vào hàng đợi yêu cầu và sử dụng bộ hẹn giờ đợi cho đến khi WebBrowser.IsBusy trả về sai.

Nếu thay vì trạng thái bận là do một hoặc nhiều hộp thoại chặn mở, bạn có thể thực hiện cùng một kỹ thuật chờ đợi và có lẽ Messagebox.Show() người dùng thông báo đang chờ điều hướng bị trễ do cửa sổ hộp thoại mở.

+5

Làm cách nào để "ngừng điều hướng hiện tại"? – Blaise

+1

@Blaise Tham khảo [Phương thức WebBrowser.Stop] (http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.stop (v = vs.110) .aspx) và http://stackoverflow.com/questions/6526876/how-to-cancel-or-dispose-current-navigation-at-webbrowser-element – Lijo

+0

Câu trả lời này đã lưu thịt xông khói của tôi hôm nay, cảm ơn – SSS

1
bool go = false; 
string SiteContent1 = string.Empty; 
string SiteContent2 = string.Empty; 
int index = 0; 
WebBrowser wb = new WebBrowser(); 

    void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 

     try 
     { 
      if (go) 
      { 
       SiteContent2 = wb.DocumentText; 
       // Code to compare to contents of the webbrowser 
       index++; 
       go = false; 
       steps = 1; 
      } 

      if (!go) 
       { 

        if (index >= TotalSiteCount) 
        { 
         Stop(); 
        } 
        else if (steps == 1) 
        { 
         wb.Navigate(UrltocompareList[index].Url1); 

        } 
        else if (steps == 2) 
        { 
         SiteContent1 = wb.DocumentText; 
         wb.Navigate(UrltocompareList[index].Url2); 
         go = true; 
        } 
        steps++;       
       } 

     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 

     } 

    } 

UrltocompareList là tập hợp của 2 trang web để so sánh.
TotalSiteCount là số lượng mục trong UrltocompareList.
Biểu mẫu cho kế thừa IOleClientSite này để xóa phương tiện như hình ảnh, video và không có tệp X đang hoạt động để có thời gian hiển thị nhanh hơn trong điều khiển trình duyệt web.

Tôi sử dụng phương pháp này thay vì system.net.webclient để lấy html của trang web, sau đó so sánh chúng.
Tôi gặp lỗi này khi truy cập phương thức wb.Navigate.

+0

vui lòng chỉnh sửa câu hỏi nếu bạn có thêm thông tin –

2

Tôi gặp vấn đề tương tự. Gọi số WebBrowser.Stop() không hiệu quả và WebBrowser.IsBusy không bao giờ trở thành sai.

Nó chỉ ra rằng nếu trang tạo ra bất kỳ loại hộp thoại (alert() popup, các lỗi javascript, popup NTLM đăng nhập, vv) bạn không thể rời khỏi trang cho đến khi hộp thoại được đóng lại.

Giải pháp của tôi là ngăn các hộp thoại hiển thị ở vị trí đầu tiên. Apparently ngăn chặn tất cả các cửa sổ bật lên này đơn giản; chỉ cần đặt

webBrowser.ScriptErrorsSuppressed = true; 
+1

Nếu bạn ngăn chặn cửa sổ bật lên NTLM đăng nhập ... không ngăn người dùng có thể vượt qua proxy, chẳng hạn? –

+0

Tôi xác nhận rằng cài đặt 'webBrowser.ScriptErrorsSuppressed = true' sẽ không hiển thị lời nhắc đăng nhập NTLM. Trong trường hợp của chúng tôi, điều đó có nghĩa là chúng tôi không thể vượt qua proxy để truy cập một trang web bên ngoài, vì vậy giải pháp này không hiệu quả đối với chúng tôi. –

+0

Lỗi này cũng có thể xảy ra nếu một người cố gắng đặt '.DocumentText' trong khi menu ngữ cảnh được nhấp phải được mở. Bạn có thể dễ dàng kiểm tra trạng thái này bằng cách kiểm tra thuộc tính 'WebBrowser.IsBusy'. Nó trả về đúng Sai hoặc True tùy thuộc vào việc điều khiển có sẵn sàng chấp nhận điều hướng mới hay không (tương ứng). –

0

Điều này có thể được giải quyết khá dễ dàng. Lỗi này xảy ra khi trình duyệt cam kết một hành động trong khi anh ấy đã thực hiện một hành động. Ví dụ: bạn đang điều hướng đến một số trang web trong khi bạn nhấp chuột phải vào trình duyệt web. Để giải quyết điều này, tôi đã làm sau:

//if my webbrowser isn't performing any actions 
if(!myWebBrowser.IsBusy) 
{ 
    //Navigate 
    myWebBrowser.Navigate("http://www.google.com"); 
} 
0

Đầu tiên Hãy thử

1- hãy Kiểm tra Navigate URL của (nếu bạn kiểm tra, xin vui lòng kiểm tra thư mục một lần nữa biên soạn)

2- Xóa Kiểm soát WebBrowser và Thêm Mới

Tôi quên sao chép tệp gốc App.Path + "\ error.html" và xem vấn đề này.

Đảm bảo Phương pháp

Tôi Fix Lỗi này trong VB6

Thêm WebBrowserControl wb (0) (Tên wb, Index = 0)

Và Trước Kể hướng

For i = 1 To wb.UBound 

    Unload wb(i) 

Next 

Load wb(1) 

wb(0).Visible = False 

wb(1).Visible = true 

wb(1).Navigate URL 
1

Một vấn đề tôi gặp phải khi chạy thử nghiệm specflow với watin trong windows 10 là win10 theo mặc định sử dụng MS Edge, vì vậy tôi đã có không bao giờ mở IE, và khi watin bắt đầu, IE đã bị kẹt trên dấu nhắc để sử dụng các thiết lập mặc định. Lựa chọn các tùy chọn, đóng trình duyệt và chạy thử nghiệm lại làm việc cho tôi.

Chỉ cần một cái gì đó để xem

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