首页 > 解决方案 > 安装期间无法最小化或移动 Winform 窗口

问题描述

Winform Form Window (FixedDialog with toolbars)提供安装和卸载应用程序的选项。(Windows exe应用程序)

当用户点击按钮安装/卸载时,窗口既不能移动也不能最小化。即,直到为活动引发的事件未完成,它被卡住并且无法在表单窗口上执行任何操作。

事件添加如下,它们独立工作。在 form1.designer.cs

         private void InitializeComponent(string defaultPath)
        {
        //Other steps
        this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
        this.InstallButton.Click += new System.EventHandler(this.InstallButton_Click);
        this.UnInstallButton.Click += new System.EventHandler(this.UnInstallButton_Click);
        }

例如。该功能InstallButton_Click有多个安装步骤,复制文件并完成其他工作,大约需要半分钟。在此期间,它不允许移动或最小化窗口。在 form.cs 中

private void InstallButton_Click(object sender, EventArgs e)
{
//Multiple steps for installation
//takes around 20-30 seconds to complete
}

该问题类似于此处提到的问题,但在那里看不到可接受的答案。

有没有办法让用户最小化或移动窗口?

标签: c#.netwindowsformswinforms

解决方案


这里有多种方法可用。

由于代码涉及一些更新GUI 控件的步骤,因此无法直接使用解决方案。

由于几乎所有的解决方案都是基于asynchronous原则的,它曾经抛出一个错误,Cross-thread operation not valid: Control 'InstallButton' accessed from a thread other than the thread it was created on.

为了避免它分离涉及 GUI 控制访问的步骤并在使用方法sequentially运行剩余的独立代码时执行它们。GI 的执行时间可以忽略不计asynchronouslyTask.Run()

//Logic to update control
Task.Run(()=>
{
 //Remaining logic
});

推荐阅读