我正在为一家公司开发“缓存图像生成器”。
此表单的目标是预先计算所有可能的按钮场景。
它创建了几个自定义按钮,拍摄快照,清除所有内容并重做,直到全部尝试。
我的问题是我无法破坏自定义按钮内的标签。
我的自定义按钮工作正常,我可以生成第一张图片。
因为我使用索引作为标签名称的最后一部分,所以第二轮将由于现有的同名项目而失败,我相信。
这就是我试图摧毁一切的方式:
foreach (my_button b in this.wrapper.Controls.OfType<my_button>())
{
b.resume_layout();
b.show();
}
this.PerformLayout();
bmp = new Bitmap(this.wrapper.Width, this.wrapper.Height);
this.wrapper.DrawToBitmap(bmp, new Rectangle(0, 0, bmp.Width, bmp.Height));
a.result = bmp;
cc = this.wrapper.Controls;
this.wrapper.Controls.Clear();
foreach (Control C in cc)
C.Dispose();
cc = null;
GC.Collect();
这是 my_button 的自定义 Dispose 处理程序:
new public void Dispose()
{
this.Dispose(true);
}
protected override void Dispose(bool disposing)
{
this.currency_label.Dispose();
this.name_label.Dispose();
this.price_label.Dispose();
this.currency_label = this.name_label = this.price_label = null;
this.BackgroundImage = null;
this.Controls.Clear();
base.Dispose(disposing);
}
我相信这是一个不会破坏的麻烦,因为我随机得到这个:
Illegal cross-thread operation: Control 'control name' accessed from a thread other than the thread it was created on.
在标签上 Dispose() 调用。
提前感谢您的帮助。
- 编辑 -
我解决了。
问题是对我的 mooremachine 框架的错误调用,它设置了所有内容 Visible=false
请删除这个问题,因为它没有用。