net 6 winforms单独的表单控制在未聚焦时弹出冻结并使用本机windows文件传输弹出

问题描述 投票:0回答:1

在我的 winforms 应用程序中,当用户单击主窗体菜单中的项目时,我有一个单独的较小窗口弹出窗体。现在,弹出的这个较小的窗体有一个按钮,一旦单击,它将开始将文件从一个位置复制到另一个位置。有很多文件(超过 6000 个),我注意到一旦开始文件复制过程,当我单击窗口外部时,例如在我的桌面或其他打开的应用程序中,它显示顶部没有响应,并且一切都稍微变灰了。有趣的是,当我打开目标文件夹时,即使窗口显示“无响应”,我仍然可以看到文件被复制到目标文件夹中。仅当我最小化弹出窗体或单击弹出窗体外部时才会发生这种情况。

有办法解决这个问题吗?我想知道使用本机 Windows 文件传输对话框/弹出窗口是否可能有所帮助,但我找不到有关如何在 net6 winforms 应用程序中使用它的良好文档。

c# .net winforms .net-6.0
1个回答
0
投票

由于您在 UI 线程上执行操作,因此会导致 UI 线程被锁定,直到复制操作完成。这就是异步编程如此重要的原因。当您调用异步方法时,您可以使用异步等待模式从UI调用它,并使用ConfigureAwait(true)等待(以避免丢失上下文和跨线程错误。)您可以在mdi父窗体中继续操作。

TL;博士 让你的方法异步任务直到它的事件参数,如按钮单击,数据源更改等。(使它们异步无效)然后用await等待它们。

public async void SB_DownloadClick(object sender, EventArgs arg)
{
   await DoDownloadAsync().ConfigureAwait(true);
}

async Task DoDownloadAsync(CancellationToken ct = default){
  // TODO YOUR DOWNLOAD CONTEXT AND CODES

}

了解更多信息

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.