标签: doevents

使用Application.DoEvents()

可以Application.DoEvents()在C#中使用吗?

这个函数是否能够让GUI跟上应用程序的其余部分,就像VB6 DoEvents一样?

c# doevents winforms

263
推荐指数
6
解决办法
17万
查看次数

如何使用DoEvents()而不是"邪恶"?

简单的搜索DoEvents会带来很多结果,这些结果基本上会导致:

DoEvents是邪恶的.不要使用它.请改用线程.

一般引用的原因是:

  • 重新入侵问题
  • 表现不佳
  • 可用性问题(例如,在禁用的窗口上拖放)

但是一些值得注意的Win32功能,例如TrackPopupMenuDoDragDrop 执行自己的消息处理以保持UI响应,就像这样DoEvents.
然而,这些问题似乎都没有遇到过这些问题(性能,再入等等).

他们是如何做到的呢?他们如何避免引用的问题DoEvents?(或者他们?)

windows winapi doevents visual-c++ winforms

23
推荐指数
1
解决办法
8643
查看次数

"DoEvents"在vb6中做了什么?

"DoEvents"在vb6中做了什么?为什么我收到错误消息"堆栈空间不足"?这是什么意思 ?

vb6 doevents

21
推荐指数
3
解决办法
4万
查看次数

什么等同于WPF应用程序中的Application.DoEvents()

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

c# wpf doevents winforms

21
推荐指数
2
解决办法
3万
查看次数

Application.DoEvents,什么时候需要,什么时候不需要?

什么是使用的必要性Application.DoEvents以及什么时候应该使用它?

doevents

12
推荐指数
1
解决办法
7416
查看次数

如何等待Power Query刷新完成?我用"BackgroundQuery = False"尝试了"DoEvents",而且更多,没有任何效果

建立:

  • Windows 7(在工作中)
  • Windows 10(在家)
  • Excel 2016(在工作中构建4627)
  • Excel 2016(在家建8730)
  • Power Query设置为导入,追加和转换Excel文件的文件夹.这一步有效.

问题描述

使用任何技术的任意组合后,等待Power Query完成刷新,如下面所示的"我尝试过的东西:"部分所述.根据"查询和连接"窗格中显示的刷新指示器(微调器?)图标,可以在Power Query表完成更新之前显示消息框并执行任何其他代码.

上述语句的例外是Application类的"OnTime"方法,如下面的"代码"部分所示,它似乎不会中断电源查询刷新的轮询.但是,此方法的问题在于它使用硬编码的时间来暂停VBA代码,并且这并不总是有效,因为查询的数据的大小,数量和持续时间将随时间而变化.

我尝试过的事情:

  • 我已阅读所有国家使用的"调​​用DoEvents"的StackOverflow上(和其他网站的资源),"BackgrgoundQuery =假",并CalculateUntilAsyncQueriesDone方法和属性.
  • 我已经尝试按照此链接的建议创建一个类来创建查询前/后查询更新事件(下面的代码示例中未显示).
  • 我已经尝试使用Do Until/While循环使用QueryTable方法的.Refreshing = True/False属性来等待刷新完成.
  • 我曾尝试设置在Excel菜单中BackgroundQuery属性(菜单栏- >数据- >连接- >属性)以虚假的"subro"这里的建议:等到ActiveWorkbook.RefreshAll完成- VBA,随着图像菜单在这里:

用于设置BackgroundQuery属性的Excel菜单.

码:

Private Sub sht_sub_Refresh_AllConnections_dev()
'Name: sht_sub_Refresh_AllConnections_dev
'Purpose: An attempt at using VBA to wait for Queries to finish updating before displaying a message.
'Description: Waits for a hard coded period of time before dislpaying the message box.
'State: WIP.
'Dev: Needs a way to look at …
Run Code Online (Sandbox Code Playgroud)

excel vba refresh doevents powerquery

8
推荐指数
1
解决办法
4902
查看次数

Application.DoEvents()仅适用于WinForms吗?

Application.DoEvents()只是形式?

我认为这个命令用于确保之前的所有命令都被处理,但现在在阅读文档后,我不再确定了.

.net c# doevents winforms

7
推荐指数
1
解决办法
2万
查看次数

如何在C#中为COM STA线程提取消息?

我有一个主要的STA线程,它调用COM对象上的很多方法,以及一个辅助STA线程,它也在同一个对象上做了很多工作.我希望主线程和辅助线程并行工作(即我希望主要和次要的隔行扫描输出).我知道我需要时不时地在主线程中抽取消息 - 在C++中调用Get/Translate/DispatchMessage就可以了.

但是我遇到了在C#中使用相同策略的问题.起初我在主线程中使用CurrentThread.Join()来控制第二个线程.它没用.然后我转向Application.DoEvents() - 每当我想要第二个线程运行时,我在主线程中调用它.结果是第二个线程快速抓取控件并且不会松开 - 主线程无法继续直到第二个线程全部完成.

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

什么是正确的做法?是否有C#等价的Get/Translate/DispatchMessage?

谢谢

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

c# com message sta doevents

5
推荐指数
1
解决办法
4937
查看次数

DoEvents,等待和编辑

我有一组包含以下内容的代码:

Application.Wait (Now + TimeValue("4:00:00"))
Run Code Online (Sandbox Code Playgroud)

这实际上暂停了从凌晨3点(当它完成运行代码时)到上午7点(应该恢复时)的四小时窗口的宏.代码基本上是无限循环.

我希望用户能够在此期间控制编辑某些单元格.我试过了

DoEvents
Run Code Online (Sandbox Code Playgroud)

但是还没有找到保持宏运行的方法,但是在宏除了等待之外什么都不做的时候,还为用户提供了控制权.

任何见解将不胜感激.谢谢!

编辑:

还有一个后续问题.我创建了这个宏来引用实际的宏"Production_Board".我希望这个宏一直运行并尽可能频繁地刷新.通过使用goto startagain,它会尝试在宏开始之前再次启动宏,因为"ontime"延迟间隔.

我怎么能让子RunMacro再次启动宏"Production_Board"完成的第二个?

Sub RunMacro
startagain:
Dim hour As Integer
Dim OT As String
hour = 0
OT = "Empty"
hour = Sheets("Calculations").Range("DR1").Value
OT = Sheets("Black").Range("D4").Value
If OT = "Y" Then
    If hour = 3 Or hour = 4 Then
    Application.OnTime TimeValue("05:00:00"), "Aespire_Production_Board"
    Else
    Application.OnTime Now + TimeValue("00:00:30"), "Aespire_Production_Board"
    End If
Else
    If hour = 3 Or hour = 4 Or hour = 5 Or hour = 6 Then …
Run Code Online (Sandbox Code Playgroud)

user-controls vba wait doevents

5
推荐指数
1
解决办法
3万
查看次数

为什么我不能使用DoEvents的呼叫面前?

在VBA中,您可以Call在它们之前调用您的方法/函数,以明确告诉编译器您不希望使用返回值(如果有).

现在也可以调用DoEvents函数Call,但我无法实现.

当我输入:

Call DoEvents
Run Code Online (Sandbox Code Playgroud)

它只是在编译时说"语法错误".

为什么我不能使用Call面前的DoEvents


在Excel 2016中使用VBE中的VBA,IIRC在2013年,2010年等也没有工作.

excel vba call doevents

5
推荐指数
1
解决办法
221
查看次数

标签 统计

doevents ×10

c# ×4

winforms ×4

vba ×3

excel ×2

.net ×1

call ×1

com ×1

message ×1

powerquery ×1

refresh ×1

sta ×1

user-controls ×1

vb6 ×1

visual-c++ ×1

wait ×1

winapi ×1

windows ×1

wpf ×1