问题标签 [doevents]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
3474 浏览

php - 我正在寻找 VB doevents 的 PHP 等效项

我正在寻找 VB doevents 的 PHP 等效项。我用VB编写了一个实时分析包,并使用doevents发布到操作系统。Doevents 允许我留在内存中并连续运行而不会填满内存,并允许我响应用户输入。我已经用 PHP 重写了这个包,我正在寻找同样的 doevents 功能。如果它不存在,我可以重新安排自己并退出。但我目前不知道该怎么做,我认为这会增加更多的开销。谢谢你,杰拉德

0 投票
2 回答
20387 浏览

c# - 替代 Application.DoEvents()

我正在开发一个基于 webBrowser 控件的消息传递系统,以便我可以随意格式化文本。当用户离线并收到消息时,消息会被存储,并在他们重新登录时为每条消息发送一个事件。当我为网站设置默认 html 等时,我通常使用:

这在程序正常运行时有效。当用户在离线时收到发送的消息时,这会触发下一条消息事件,依此类推,每条消息直到最后一条。这意味着他们离线时发送的最后一条消息是唯一显示的消息。我想要像 Application.DoEvents() 这样的东西,它允许控件不断更新和加载,但不会触发其他事件。

谢谢

编辑:

我通过完全删除 DoEvents() 解决了这个问题。我没有在工作时更改 DocumentText,而是设置了一个字符串生成器,然后在最后一次设置了 html。

0 投票
2 回答
5590 浏览

c# - 如何在 C# 中为 COM STA 线程泵送消息?

我有一个主 STA 线程,它在 COM 对象上调用很多方法,还有一个辅助 STA 线程,它也在同一个对象上做很多工作。我希望主线程和辅助线程并行工作(即我希望主线程和辅助线程的交错输出)。我知道我需要时不时地在主线程中发送消息——在 C++ 中调用 Get/Translate/DispatchMessage 就可以了。

但是我在 C# 中使用相同的策略时遇到问题。起初我在主线程中使用 CurrentThread.Join() 来控制第二个线程。它没有用。然后我转向 Application.DoEvents() - 每当我希望第二个线程运行时,我都会在主线程中调用它。结果是第二个线程迅速抓住了控制权并且不会放手——在第二个线程全部完成之前,主线程无法继续。

我读过文档说 Application.DoEvents() 将处理所有等待事件 - 而 GetMessage() 只检索一条消息。

正确的做法是什么?是否存在与 Get/Translate/DispatchMessage 等效的 C#?

谢谢

更新:第二个线程运行太快,向主 STA 线程发送大量 COM 调用消息。我只是在第二个线程中添加了延迟以减慢它的速度。现在两个线程基本上是并行运行的。但我仍然想知道是否存在与 GetMessage/TranslateMessage/DispatchMessage 等效的 C#。

0 投票
2 回答
27405 浏览

c# - 什么相当于 WPF 应用程序中的 Application.DoEvents()

从 MSDN 看来,Application.DoEvents() 在 Windows.Forms 中可用。WPF中的等价物是什么。

0 投票
2 回答
2904 浏览

c# - 等待 WebBrowser 完成加载时 Application.DoEvents() 出现问题

我正在尝试加载 WebBrowser 内容,然后我想添加一些文本并滚动到底部。

这是我的代码示例:

当我运行它时,有一个未处理的异常“对象引用未设置为对象的实例”。或者当我评论滚动的行时,文本会添加到 WebBrowser 的先前内容中,然后导航到新内容。

所以在我的示例代码的第一行之后,我放了:

但它搞砸了一切。我的应用程序正在做一些非常奇怪的事情,例如多次调用同一个方法,而应该调用一次。

有什么解决办法吗?

0 投票
3 回答
228 浏览

wpf - 下载开始时 WPF 窗口未完成渲染

我正在编写一个小文件下载实用程序。在我的MainWindow的Window_Loaded()事件上调用DownloadFile()方法。由于DownloadFile方法是资源密集型的,因此在下载开始时MainWindow不会在屏幕上完成渲染。就在下载完成后,我来查看我的 WPF 表单上的实际控件。

为了控制这一点,我正在使用以下DoEvents()代码,但它仍然无法正常工作。我在 Form 构造函数中的InitializeComponent()之后和在Window_Loaded事件中调用DownloadFile()之前调用此函数。

0 投票
0 回答
733 浏览

com - C# COM 互操作和 Application.DoEvents()

我找到了以下代码,并试图在 COM 模块中实现它:

但是,我发现 Application.DoEvents() 和 COM 不能一起工作。该代码在 C# 应用程序中运行良好,但在通过 COM 调用时会挂起。如您所知,我正在尝试获取网站缩略图,但我似乎无法找到 DoEvents() 的替代品。

有什么建议么?

谢谢,凯文

0 投票
2 回答
620 浏览

wpf - 如何在 WPF 中一个接一个地加载 UI 控件

我正在开发一个有多个列表视图的 WPF 应用程序。

我一次获得所有列表视图所需的所有数据。但是,我的要求是,项目数量较少的列表视图应首先加载并在下一个列表视图开始加载之前显示给用户。

所以基本上,我需要先加载 ListView1 并使其对用户可见。然后 ListView2 开始加载,完成后对用户可见。换句话说,所有列表视图都是在页面加载时加载的(9 个),并且每个列表视图在加载后立即可见。

我尝试使用等同于 DoEvents() http://www.cnblogs.com/sheva/archive/2006/08/24/485790.html的东西, 但它没有用。

只是为了澄清; 当页面被加载并且 lv1 的项目被填充并且 lv1 与项目一起显示时,但 lv2 和 lv3 将是空的。然后加载 lv2 的项目,我们应该看到 lv1 和 lv2 填充了它们的项目。这时候lv3应该是可见的并且是空的。然后我们将获取 lv3 的项目并填充所有列表视图。在第一个加载其项目后,所有这些都应该是可见的。任何人都可以提出任何方法来实现这一目标吗?

谢谢。

0 投票
1 回答
5672 浏览

c# - 如何让 For 循环等待用户输入?

我有一个for循环到一个站点并发布到它的表单。对于listbox我希望它等待用户将数据填写到站点中的每个项目,然后移动。这里的关键点是“等待”。

所以我的问题是:是否可以for循环等待用户输入?

这是for我正在工作的循环,以便将数据加载到表单中:

这是在网站上单击提交的代码:

我也尝试过制作一个for没有代码的循环以使其继续。例如:i++ 并发表if声明以使其继续,但这落后于我的界面。

0 投票
5 回答
13973 浏览

c# - 等待漫长的过程,仍在更新UI

我一直在尝试创建一个在不阻塞 UI 线程的情况下写入数据库的任务。我遇到的最大问题是等待该过程完成而不会发生阻塞。

我一直在尝试避免使用DoEvents(尽管现在通过这个程序非常频繁地使用它,但我想在前进的同时停止使用它)。

我试图创建进程以在第二个线程上运行并等待它完成以及使用BackgroundWorker.

我遇到的问题不是让代码在不同的线程中运行,而是试图找到一种方法来等待它完成。

基本上,现在我执行以下操作:

  1. 连接到数据库
  2. 创建一个后台工作者(或线程)来写入数据库(我可能最终会使用,BackgroundWorker所以我可以使用ReportProgress
  3. 启动线程或BackgroundWorker
  4. 使用 While 循环等待线程 /BackgroundWorker完成。对于线程,我等待IsAlive变为假,对于BackgroundWorker,我切换一个布尔变量。
  5. 我让用户知道该过程已完成。

问题出在#4。

执行一个没有代码的 while 循环,或者Thread.Sleep(0)让 UI 被阻塞(Thread.Sleep(0)使程序也占用 100% 的程序资源)

所以我这样做:

-或者-

这会阻止用户界面。

如果我Application.DoEvents()在那里调用,UI 会更新(尽管它是可点击的,所以我必须在此过程运行时禁用整个表单)。

如果我同步运行该过程,我仍然需要创建某种方式来更新 UI(在我看来,是一个DoEvents调用),因此它不会看起来被锁定。

我究竟做错了什么?