我在点击button的click按钮后,过了大约10秒,程序崩溃了
代码如下:
namespace disposeTest
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Button btn = new Button();
this.Content = btn;
btn.Click += Btn_Click;
}
private void Btn_Click(object sender, RoutedEventArgs e)
{
ClassWidthDispose classWidthDispose = new ClassWidthDispose();
}
}
public class ClassWidthDispose
{
HttpClient client = null;//声明一个null变量
public ClassWidthDispose()
{
}
~ClassWidthDispose()
{
client.Dispose(); //崩溃
}
}
}
崩溃的原因是由于显式的声明了析构函数~ClassWidthDispose,上面的Click函数中有一个ClassWidthDispose的局部变量,在执行完函数后,GC会在适当的时间释放该局部变量,注意不是立即释放,而是在适当的时机,我这里是等了大约10秒后才会进,由于显式声明了析构,所以就调用了析构的代码,所以崩溃了
如果不显示声明析构的话,是没问题的