c# - 安装期间无法最小化或移动 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
}
该问题类似于此处提到的问题,但在那里看不到可接受的答案。
有没有办法让用户最小化或移动窗口?
解决方案
这里有多种方法可用。
由于代码涉及一些更新GUI 控件的步骤,因此无法直接使用解决方案。
由于几乎所有的解决方案都是基于asynchronous
原则的,它曾经抛出一个错误,Cross-thread operation not valid: Control 'InstallButton' accessed from a thread other than the thread it was created on.
为了避免它分离涉及 GUI 控制访问的步骤并在使用方法sequentially
运行剩余的独立代码时执行它们。GI 的执行时间可以忽略不计asynchronously
Task.Run()
//Logic to update control
Task.Run(()=>
{
//Remaining logic
});
推荐阅读
- node.js - 使用条件将键添加到嵌套数组
- postgresql - Postgresql IN 错误:运算符不存在 integer = integer[]
- objective-c - 记录的数据值保持不变 - DJI UXSDKDemo
- liferay - 以编程方式将文件添加到liferay中的文档和媒体文件夹时如何向订阅者发送电子邮件通知
- c# - .NET JIT 在使用工厂模式和 If-else 或 switch 时的区别
- asp.net - ASP.NET 登录控件未重定向
- docker - 如何在 Docker 中构建映像而不每次都下载所有依赖项?
- html - 如何从增加高度的相对位置中删除额外的空间?
- vbscript - VB代码退出工作
- amazon-web-services - 是否可以在 cloudformation 中为一组 Lambda 创建 AWS::Lambda::Version