2015-03-27 14 views
5

Tôi đang chạy chương trình biểu mẫu Windows thực hiện tất cả công việc của nó trên một chuỗi khác. Sau một thời gian, giao diện người dùng bị đóng băng và ngừng phản hồi. Chủ đề nền vẫn hoạt động tốt (tôi có thể thấy rằng từ công việc đã hoàn thành).Ngoại lệ cơ hội đầu tiên của loại 'System.IndexOutOfRangeException' trong exe trong cửa sổ đầu ra

tôi có ngoại lệ này:

Một cơ hội ngoại lệ đầu tiên của loại 'System.IndexOutOfRangeException' trong exe

Khi tôi bắt nguồn từ dòng ngoại lệ và chạy nó một lần nữa, tôi nhận điều này:

Chủ đề <No Name> (0x19b4) đã thoát với mã 0 (0x0).

Dòng mã chạy tốt nhưng nó cho số System.IndexOutofRangeException.

MatchCollection tempcollection = Regex.Matches(document, 
     "(?<data>More information from(.|\\r|\\n)*?</div>)"); 
if (tempcollection.Count == 0) 
{ 
    return Result; 
} 
string ThisDiv = tempcollection[0].Groups["data"].Value; 
// The above line shows exception in Output Window, 
// otherwise it works fine and moves to next line. 

UPDATE: Tôi đã nhìn thấy đầu ra cung cấp thông tin về tất cả các ngoại lệ cho dù đó là bắt hay không, tôi nghĩ đó là nguyên nhân gây ra đóng băng UI nhưng đó không phải là.

  1. Vui lòng giúp tôi loại bỏ ngoại lệ này.
  2. Đây có phải là ngoại lệ không được kiểm soát; Tôi đã học được trong các nghiên cứu của tôi rằng. Net không có ngoại lệ không được kiểm soát. Xin vui lòng làm rõ điều này cho sự hiểu biết của tôi.
+0

Tại sao bạn không đặt dòng tempcollection [0] .Groups ["data"]. Giá trị bên trong câu lệnh if "if (tempcollection.Count! = 0)"? Nếu số đếm là 0, "string ThisDiv = tempcollection [0] .Groups [" data "]. Value;" sẽ ném ngoại lệ "Ngoài phạm vi". –

Trả lời

2

Các regex có thể không quay trở lại một giá trị nhóm và tempcollection [0] .Groups [ "dữ liệu"] có thể không được thiết lập vì thế indexer trên nhóm sẽ thất bại và bạn có thể nhận được một chỉ số ra khỏi phạm vi ngoại lệ thử thêm một kiểm tra null trên cùng một trước khi cố gắng để có được một giá trị từ nó.

Hãy thử xác minh regex trên dữ liệu đầu vào để xác thực rằng điều trên là đúng trên bất kỳ công cụ regex nào.

+0

hãy để tôi kiểm tra xem, Neeraj là nó không được kiểm tra ngoại lệ, tại sao nó không bị bắt – Charlie

+0

Java có một khái niệm xác định một phương thức có thể thông qua không chỉ thông qua ý kiến ​​nhưng là một phần của ngữ nghĩa mã. .Net lần lượt không có ngữ nghĩa này, nhưng thay vào đó tất cả các thông tin đó là một phần của tài liệu phương pháp đó. Vì vậy, đối với một 'int.Parse' (https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx) phương pháp tài liệu mã xác định rằng nó có thể có những ngoại lệ. Bạn sẽ phải viết mã của bạn một cách rõ ràng dựa trên tài liệu này để xử lý bất kỳ trường hợp ngoại lệ nào được mong đợi. Hơi như dưới đây: thử { // regex Logic } catch (IndexOutOfRangeException iore) {// logic khác } – Neeraj

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