winforms - 如何在添加更多按钮的同时停止 foreach 循环然后我突然关闭表单而没有错误:无法访问已处置的对象?
问题描述
我正在创建一个带有流面板布局的房间管理表单,添加了 410 个按钮,我使用Thread一个接一个地查看添加的按钮。问题是当我点击右上角的X按钮时,程序在MethodInvoker报错:
“ObjectDisposedException 未处理”
System.Windows.Forms.dll 中出现“System.ObjectDisposedException”类型的已处理异常
附加信息:无法访问已处置的对象。
关闭表单时如何停止 foreach 循环?目前我只在关闭时隐藏该表单,以免出现错误。
我的代码:
public fPhong()
{
InitializeComponent();
load();
}
void load()
{
Thread thr = new Thread(loadPhongList);
thr.IsBackground = true;
thr.Start();
}
void loadPhongList()
{
List<phong> phongList = phongDAO.Instance.phong();
foreach (phong item in phongList)
{
Button bt = new Button() { Width = phongDAO.phongWidth, Height = phongDAO.phongHeight };
if (item.SONGUOIDANGO == 0)
{
bt.Text = item.MAPHONG + Environment.NewLine + "Trống";
bt.BackColor = Color.AliceBlue;
}
else
if (item.SONGUOIDANGO > 0 && item.SONGUOIDANGO < item.SLTD)
{
bt.Text = item.MAPHONG + Environment.NewLine + "Có người";
bt.BackColor = Color.Aquamarine;
}
else
{
bt.Text = item.MAPHONG + Environment.NewLine + "Đầy";
bt.BackColor = Color.Red;
}
bt.Click += Bt_Click;
bt.Tag = item;
Thread.Sleep(5);
if (flpPhong.InvokeRequired)
{
flpPhong.Invoke(new MethodInvoker(delegate () { flpPhong.Controls.Add(bt); }));
}
}
}
void Bt_Click(object sender, EventArgs e)
{
string maphong = ((sender as Button).Tag as phong).MAPHONG;
loadTT(maphong);
}
解决方案
推荐阅读
- javascript - 如何使用 Materialize 获取元素属性 onAutocomplete
- swift - 在 SwiftUI 中更改 NSSearchField 的高度
- react-redux - React-Redux:使用表格内的按钮将获取的 API 数据从组件发送到动态路由组件
- python - 无法在 Pyqt5 中更改 qtextedit 的背景边框,有什么建议吗?
- generics - 使此函数通用时如何满足特征界限?
- ios - SwiftUI:在 NavigationView 中嵌入父视图时不调用 PreferenceKey
- node.js - 有没有办法将 discord.js 集合下载为文件并在机器人出现故障时恢复它?
- c# - 为什么 C# 中的 Image.Save() 并不总是给出相同的序列化结果以及如何以确定的方式序列化图像?
- java - 如何递归地制定二元微分问题?
- c# - 检测类属性C#中的变量值变化