2013-01-10 37 views
6

Đó là giả định của tôi rằng khối cuối cùng luôn được thực hiện miễn là chương trình đang chạy. Tuy nhiên, trong ứng dụng giao diện điều khiển này, khối cuối cùng dường như không được thực hiện.Tại sao cuối cùng không được thực thi?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      try 
      { 
       throw new Exception(); 
      } 
      finally 
      { 
       Console.WriteLine("finally"); 
      } 
     } 
    } 
} 

Output

Result

Lưu ý: Khi các ngoại lệ được ném ra, cửa sổ askmed tôi nếu tôi muốn kết thúc appliation, tôi nói 'Có'.

+4

Bấm 'no' và xem những gì sẽ xảy ra –

+0

chạy nó từ dòng lệnh thay vì trong IDE của bạn – KevinDTimm

+0

Nó trông rất lạ. 'cuối cùng' nên được viết chính xác sau StackTrace. –

Trả lời

2

Khi bạn nhận được "ConsoleApplication1" đã ngừng phản hồi, bạn có hai lựa chọn.

Windows Error Reporting dialog

Nếu bạn bấm hủy bỏ, những lỗi nào đó được phép tiếp tục cho đến khi cuối cùng các ứng dụng được chấm dứt. Điều này cho phép khối finally thực thi. Nếu bạn không nhấn hủy thì Windows Error Reporting sẽ tạm dừng quy trình, thu thập một minidump và sau đó chấm dứt ứng dụng. Điều này có nghĩa là khối finally không được thực hiện.

Hoặc, nếu bạn xử lý ngoại lệ theo phương pháp cao hơn, bạn chắc chắn sẽ thấy khối finally. Ví dụ:

static void unhandled() 
{ 
    try 
    { 
     throw new Exception(); 
    } 
    finally 
    { 
     Console.WriteLine("finally"); 
    } 
} 

static void Main(string[] args) 
{ 
    AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; 
    try 
    { 
     unhandled(); 
    } 
    catch (Exception) 
    { 
     // squash it 
    } 
} 

Luôn cung cấp cho các đầu ra "cuối cùng"

6

Nó được thực thi. Chỉ cần bạn không nhận thấy. Chỉ khi bạn thấy Windows is checking for a solution to the problem, hãy nhấp vào Hủy và xem nó.

enter image description here

+1

Bạn đang sử dụng môi trường nào? Tôi đang sử dụng Windows 7, 64. Khi nó hỏi bạn "Windows đang kiểm tra một giải pháp cho vấn đề .." không bấm hủy bỏ. Hãy để nó làm điều của nó. – Anish

+0

Tôi đang sử dụng Windows 7-32 bit. Có bạn là đúng. –

3

Có thể là bạn đang gỡ lỗi và khi bạn nhấp không, việc thực hiện đang được tạm dừng bởi debugger.

+0

Đây là lý do thực sự. –

2

Khi chạy từ dòng lệnh. Chỉ khi Windows cố gắng kết thúc ứng dụng một cách duyên dáng, hãy nhấp vào no hoặc cancel nếu ứng dụng không phản hồi. enter image description here

+0

Bạn đang sử dụng môi trường nào? Tôi đang sử dụng Windows 7, 64. Khi nó hỏi bạn "Windows đang kiểm tra một giải pháp cho vấn đề .." không bấm hủy bỏ. Hãy để nó làm điều của nó. – Anish

+0

Sau đó, Windows sẽ chấm dứt ứng dụng mà không để cho nó in ra bàn điều khiển –

-2

Một ngoại lệ sẽ làm bong bóng ngăn xếp cho đến khi tìm thấy trình xử lý. Nếu không, chương trình sẽ thoát. Đó là trường hợp trong kịch bản của bạn ... không có trình xử lý, vì vậy chương trình sẽ thoát trước khi nó chạm vào khối cuối cùng.

+2

-1 - 'cuối cùng' sẽ được thực thi * trước khi * tạo bọt lên ngăn xếp - trên thực tế, * trong khi * ngăn xếp thư giãn. –

+0

toàn bộ mục đích cuối cùng dường như bị mất việc sử dụng nó nếu không có một đánh bắt? thats một cái mới về tôi: L – RhysW

+0

Xin lỗi, đó là một câu trả lời vô tư. – ktm5124

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