我有一个带有菜单条,状态条和主拆分容器的表单(它本身包含其他拆分容器,树视图,选项卡控件等)。有时(相当频繁地,实际上),应用程序将停止调整主窗体内的控件(通常在后台线程操作期间或之后检索数据)。控件本身仍声称其DockStyle是Fill,但控件没有使用表单调整大小。我找不到任何可能导致此问题的信息,有没有人遇到过这样的事情?
答案 0 :(得分:0)
确保从正确的线程操作UI至关重要。我建议使用以下扩展名methdds
public delegate void EmptyHandler();
public delegate void ParamHandler(params object[] args);
public static void SafeCall(this Control control,
ParamHandler method, params object[] args)
{
if (control.InvokeRequired)
{
control.Invoke(method, args);
}
else
{
method(args);
}
}
public static void SafeCall(this Control control, EmptyHandler method)
{
if (control.InvokeRequired)
{
control.Invoke(method);
}
else
{
method();
}
}
然后你可以从错误的线程中调用适当的方法,比如
{ ... background thread
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.SafeCall(SetImage, e.Result);
}
}
使用正确的线程调用方法SetImage(Bitmap bitmap)
。
答案 1 :(得分:0)
原来我有一个没有相应的ResumeLayout()调用的流氓SuspendLayout()调用。这种行为不是我所期望的。每天学些新东西!谢谢你的期待!