c# - 在方法工作期间无法与窗口交互 C#
问题描述
如果我启动一个需要 5s 直到完成的方法。它完美地工作。但是,在此期间,我无法与 Window 交互。
例如:您希望该程序的用户启动一个使用 Selenium 打开 Webside 的方法并搜索 100 个包含名称“代码”的网站......这需要 100 个。但在此期间,您无法与用户界面交互,也无法关闭它。
窗户:
例如 :
driver.Navigate().GoToUrl(url);
().Window.Maximize();
Thread.Sleep(3000);
谢谢
解决方案
您的应用程序当前在单个线程中运行。这意味着它可以同时处理一件事。在这种情况下,处理与 Window 的交互或执行长时间运行的代码。
一种可能的选择是在单独的线程上执行长时间运行的代码。本文中的更多信息。
C# 有一个在后台执行工作的完美解决方案 - 任务。我建议您对小任务使用任务而不是线程。Tasks 类允许您创建任务并异步运行它们。任务是代表应该完成的一些工作的对象。任务可以告诉您工作是否已完成,如果操作返回结果,则任务会为您提供结果。
要创建任务并运行它,只需将 Action 作为参数传递给 StartNew 方法:
Task.Factory.StartNew(() => {
driver.Navigate().GoToUrl(url);
driver.Manage().Window.Maximize();
Thread.Sleep(3000);
});
在此处启动任务的其他方式。
您可以在这篇 msdn 文章中阅读有关任务的更多信息
推荐阅读
- html - HTML/CSS 将 DIV 伪装成复选框
- c++ - 在 C++ 中迭代向量并擦除某些元素
- google-sheets - 如何通过 Google 表格上的每个唯一 ID 仅计算每个提案的一票
- python - 通过 svgwrite 在 SVG 中垂直对齐
- reactjs - ReactJS 和 Webpack 模块联合应用程序在部署到云端时包含未定义的 url
- php - 简单的 DomDocument 和 GetElementsByTagName
- html - 是否可以一次使用样式(自动宽度或高度)调整 HTML 中的所有元素(标签)?
- c# - 是否可以将路由组件与 Blazor WASM 中的客户端应用程序放在单独的项目中?
- c# - 数据未出现在链接表中(子类别和产品)
- firebase - 如何在 expo 的 React Native 天才聊天中设置用户头像?