WinForm 在子线程中打开一个新窗体

项目中有个动作:打开一个窗体展示

FormToast toast = new FormToast();
toast.lblMsg.Text = str;
toast.Show();

大多数情况,直接在界面上(主线程)点击按钮的时候展示,没问题。

有些特殊情况,是在新开的子线程中要展示窗体,用上面的办法就不行了,窗体展示不全,像被挡住或卡住。

网上找到了解决的办法:https://stackoverflow.com/questions/11995466/c-sharp-calling-form-show-from-another-thread

本例的写法如下:

public static void hint(Form parent, string str)
{
    FormToast toast = new FormToast();
    parent.Invoke((MethodInvoker)delegate () {
        toast.lblMsg.Text = str;
        toast.Show();
    });
}

把当时的窗体(姑且称为“父窗体”)拿过来,使用invoke方法。

WinForm 在子线程中打开一个新窗体_第1张图片

问题解决。

你可能感兴趣的:(Windows桌面开发)