使用 async/await 时 GUI 冻结

2023-11-29

我试图找出下面的代码有什么问题。我认为使用 async 和 wait 让我忘记 GUI 问题,例如冻结,因为一些长代码阻塞了主线程。

单击按钮后,GUI 会做出响应,直到调用longRunningMethod, 如下所示:

 private async void openButton_Click(object sender, RoutedEventArgs e)
 {
    //doing some usual stuff before calling downloadFiles
    Task<int> result = await longRunningMethod(); // async method

    //at this point GUI becomes unresponsive

    //I'm using the result here, so I can't proceed until the longRunningMethod finishes

  }

在该方法完成之前我无法继续,因为我需要result。为什么此代码会冻结我的应用程序?


问题出在内longRunningMethod.

代码是什么probably所做的是一些 CPU 密集型或阻塞操作。

如果你想在后台线程上运行一些 CPU 密集型代码,你必须明确地这样做;async不会自动跳转线程:

int result = await Task.Run(() => longRunningMethod());

请注意,如果longRunningMethod受 CPU 限制,它应该具有同步(而不是异步)签名。

If longRunningMethod is notCPU 限制(即当前处于阻塞状态),那么您需要更改其中的阻塞方法调用longRunningMethod是异步的,并通过调用它们await。然后你可以使longRunningMethod异步并通过调用它await还有:

int result = await longRunningMethodAsync();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 async/await 时 GUI 冻结 的相关文章

  • 有没有办法为向量采用内存资源?

    我已经开始在我的项目中使用 pmr allocators 并且我已经看到使用它们带来了很多性能提升和优势 我使用的分配器与我在下面的简单示例中展示的非常相似 include
  • 即使定义了其他主键,实体框架 6 也会创建 Id 列

    我将 DataObject 定义为 public class SensorType EntityData PKs public string CompanyId get set public string ServiceId get set
  • 在 C# 中实例化 python 类

    我已经用 python 编写了一个类 我想通过 IronPython 将其包装到 net 程序集中 并在 C 应用程序中实例化 我已将该类迁移到 IronPython 创建了一个库程序集并引用了它 现在 我如何真正获得该类的实例 该类看起来
  • 如何在函数中将结构成员作为指针传递?

    问题是我有一个结构是另一个 主要 结构的成员 我编写了一个函数来清除第一个结构 它需要一个指向结构的指针 我想使用该函数来清除主要结构内的结构 但我不确切知道哪种方法是正确的 为了更好地解释它 这里有一些代码 我有一个结构 定义为 type
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • 使用 std::string 导致 Windows“找不到入口点”[重复]

    这个问题在这里已经有答案了 当我用 G C C 编译它时 include
  • 是否有更好(更简单)的方法来获取特定域 SID?

    我被指派修改 WinForms 应用程序 主要检查登录用户是否属于特定域 这是我到目前为止所想出的 byte domainSid var directoryContext new DirectoryContext DirectoryCont
  • 输入缓冲区刷新

    考虑下面的代码 include
  • C# 列表框 ObservableCollection

    我正在尝试使用 ListBox DataSource ObservableCollection 但是我不知道如何在 OC 更新时让列表框自动更新 我可以在 OC 上挂接 CollectionChanged 事件 但是我需要对列表框执行什么操
  • 如何从c++调用python

    我是Python新手 我尝试像这样从 C 调用 python 脚本 在 Raspberry Pi 中 std string pythonCommand python Callee py a b int res system pythonCo
  • 如何在单独的类库中管理客户端上下文对象?

    我正在尝试创建一个库 类库 对于共享点 它将拥有所有共享点 dll 来与共享点服务器交互上传文件 文档并创建文档库和文档集 现在这个库可以被使用客户端 例如 Web 应用程序 asp net webform 或 mvc 或控制台应用程序或
  • 如何确定我的 TextBlock 文本是否正在被修剪?

    以下文本块按预期换行和修剪 修剪文本时会显示省略号
  • 在 C# 中使用 as 关键字与泛型类型发生冲突的编译时行为

    当尝试对无法转换为的非泛型类型使用 C as 关键字时 编译器会给出无法转换类型的错误 但是 当对泛型类型使用 as 关键字时 编译器不会给出错误 public class Foo public class Bar
  • 通过 Nuke.Common/NuGet.CommandLine 部署 NuGet 包时如何通过 Azure Auth

    我正在尝试通过 Azure DevOps 上的 Nuke 和 CI CD 自动执行 NuGet 包更新 一切都构建得很好 但在 PushNuGet 步骤中 该过程尝试通过弹出窗口向 Azure 进行身份验证 这显然从未在 in devops
  • 如何使WPF TreeView风格成为WinForms TreeView?

    WPF 默认的 TreeView 非常好 我仍然希望它有连接每个子元素的线 就像 Windows 窗体 TreeView 一样 我在网上搜索了一些例子 但设计得不够好 我怎样才能用WPF实现它 让我回答我自己的问题 Code 您需要做的只是
  • 为什么 C# 编译的正则表达式比等效的字符串方法更快?

    每次我必须对字符串执行简单的包含或替换操作 其中我正在搜索的术语是固定值 时 我发现如果我获取示例输入并对其进行一些分析 则使用编译的正则表达式是几乎 总是比使用 String 类中的等效方法更快 我尝试过比较多种方法 hs是要搜索的 干草
  • Cuda:最小二乘求解,速度较差

    最近 我使用Cuda编写了一个名为 正交匹配追踪 的算法 在我丑陋的 Cuda 代码中 整个迭代需要 60 秒 而 Eigen lib 只需 3 秒 在我的代码中 矩阵 A 是 640 1024 y 是 640 1 在每一步中 我从 A 中
  • g++4.9 不支持 std::align

    在学习对齐问题等时 我意识到我的 g 4 9 macports OS X 实现不支持std align 如果我尝试编译 使用 std c 11 此示例代码来自http www cplusplus com reference memory a
  • 访问 Visual Studio 扩展中的当前代码窗格

    我正在编写一个 Visual Studio 2010 扩展 在代码视图中带有右键单击菜单 我希望能够从菜单项事件处理程序检查当前代码 但无法在对象模型中找到执行此操作的位置 如何在 Visual Studio 扩展中访问当前窗口中的代码 E
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi

随机推荐

  • 为什么迭代大型 Django QuerySet 会消耗大量内存?

    该表包含大约一千万行 for event in Event objects all print event 这会导致内存使用量稳定增加到 4 GB 左右 此时行会快速打印 第一行打印之前的漫长延迟让我感到惊讶 我预计它几乎会立即打印 我也尝
  • 有没有办法获取带有非局部变量的 dict 对象? [复制]

    这个问题在这里已经有答案了 我想知道 Python 中是否有一个函数返回一个 dict 对象 其中包含用于封闭函数的非局部变量 喜欢vars or locals 对于局部变量或globals 对于全球的 更新 正如 thebjorn 所指出
  • 当我尝试克隆不存在的存储库时,如何阻止 git 询问凭据?

    我正在做一些研究 我需要下载大量的 git 存储库 大约 17k 我编写了一个非常简单的 Python 脚本 用于自动从包含 GitHub URL 的数据集进行克隆例程 first 10 data url name data project
  • 如何创建结构体数组

    我想实现一个搜索表 这是数据 20130610 Diamond CoinMate 11 7246 15 7762 2897 20130412 Diamond Bithumb 0 209 0 2293 6128 20130610 OKCash
  • 通过 youtube api 检索视频的公共统计数据

    可以获取视频的公开统计数据吗 使用这样的东西我可以获得视频的总观看次数和点赞数 https www googleapis com youtube v3 videos part statistics key API KEY id ekzHIo
  • 如何将模型绑定到 List

    我正在努力完成这样的事情 我觉得这是可能的 如果不是 可能是 MVC 框架中的疏忽 View 分部视图是可编辑的表单 强类型化为单个 MyViewModel 并使用 MyViewModel 类上的 DataAnnotations 进行验证
  • 使用“std::conditional_t”根据其模板参数定义类“typedef”

    我尝试使用std conditional t定义一个类A s typedef取决于其模板参数T template lt typename T gt class A public typedef std conditional t lt st
  • 从本地 Spark 实例读取 Google 存储 gs:// 文件系统

    问题非常简单 您有一个本地 Spark 实例 集群或仅在本地模式下运行 并且您想从 gs 读取数据 在 Spark 2 4 3 上 我需要执行以下操作才能从 Spark 本地启用 GCS 访问 我使用 JSON 密钥文件与client id
  • HTTP POST 返回错误:417“预期失败。”

    当我尝试 POST 到 URL 时 会导致以下异常 远程服务器返回错误 417 期望落空 这是示例代码 var client new WebClient var postData new NameValueCollection postDa
  • 从标头(邮递员)发出访问令牌请求时出现错误

    从标头发出访问令牌请求时 出现以下错误 错误 错误 不支持的授权类型 error description 不支持授予类型 我做错了什么或者错过了什么吗 请帮忙 附上截图 在此输入图像描述 您使用了错误的选项卡 标题应该只有 1 2 Cont
  • 如何在 C# 中从字节数组中删除和添加字节

    我有一个配置文件 cfg 用于创建命令行应用程序以将用户添加到 SFTP 服务器应用程序 cfg 文件需要为 cfg 文件中的每个条目保留一定数量的保留字节 我目前只是通过创建字节数组并将其转换为字符串 然后将其复制到文件中 将新用户附加到
  • 使用并行有线 RS232 从多个设备接收数据

    我目前正在开发一个小型应用程序 用于监控太阳能集热器产生的功率 电流 该阵列连接到 3 个逆变器 每台逆变器都有一个RS232接口 每10秒传输一行信息 当前状态 由于我想使用只有一个串行端口的设备进行监控 因此我需要想出一种能够并行读取所
  • Windows Phone 7:文件流异常

    我尝试使用 FileStream 使用命名空间 System IO 但出现异常 Attempt to access the method failed 这是代码 FileStream fs new FileStream file txt F
  • 如何使用 apache POI XWPFDocument 从 java 创建多级项目符号和编号?

    我已经阅读了许多与我的要求相关的博客和论坛 但到目前为止 我能够在获得的所有帮助下生成第一级的项目符号或编号 任何人都可以指导我如何使用 apache poi 创建多级编号 想知道 Apache POI XWPFDocument 是否支持这
  • 使用 KSOAP Android 创建 SOAP 请求

    我需要生成一个像这样的肥皂请求 SOAP请求 POST TennisMasters TennisMasters Listener asmx HTTP 1 1 Host playinkstudio com Content Type text
  • 使用 mod_rewrite 从子域重定向到主域

    我的问题是我有一个正常运行的子域 sub mydomain com sub 已加载到 mydomain com sub 中 我想做的是将所有对 sub mydomain com 的请求重定向到 mydomain com 不知怎的 当我是子域
  • SQL 过程 XML 性能:插入表中的列

    我在 SQL 过程中遇到问题 但似乎找不到正确的解决方案 该存储过程包含一个 XML 数据类型的参数 名称 data 传入消息的示例如下 实际消息包含更多节点 但为了简单起见 我将它们省略了
  • 使用 GDI+ API 绘制图像

    我正在使用GDI API 只是为了显示图像 bmp 屏幕上 这是执行任务的函数的代码 void drawImg ArmorInfo PupupWnd HDC hdc GdiplusStartupInput gdiplusStartupInp
  • 如何在MainActivity中获取ViewPager创建的fragment的元素?

    我有几个片段 它们是用ViewPager 我添加一个addOnPageChangeListener to the ViewPager在 MainActivity 中onCreate给出所选片段位置的方法 尽管我通过声明防止碎片自我毁灭set
  • 使用 async/await 时 GUI 冻结

    我试图找出下面的代码有什么问题 我认为使用 async 和 wait 让我忘记 GUI 问题 例如冻结 因为一些长代码阻塞了主线程 单击按钮后 GUI 会做出响应 直到调用longRunningMethod 如下所示 private asy