我很惊讶地看到没有很多关于函数pythoncom.PumpMessages()
或pythoncom
模块的解释文档。
那么做什么pythoncom.PumpMessages()
和pythoncom.PumpWaitingMessages()
做什么以及如何做?我真正了解它用于从输入设备捕获事件。
我们有一个WPF忙窗口指示器。它在主线程上使用表示window.ShowDialog()
。响应Loaded事件后,将执行操作并关闭窗口,以便应用程序继续其工作。
在window.ShowDialog()
似乎从时间而不显示对话框,Loaded事件不会触发这样的应用程序挂起挂时间(很少)。相关代码如下:
private void BusyIndicatorAsyncCall(string text, Action<DoWorkEventArgs> doWorkDinamicView = null, Action doWork = null, Action workCompleted = null, Action<Exception> exceptionReturn = null)
{
Window window = this.CreateWindowOfBusyIndicator(text);
Dispatcher dispatcher = window.Dispatcher;
BackgroundWorker backgoundworker = new BackgroundWorker();
IViewModel viewModel = (window.Content as UserControl).DataContext as IViewModel;
this.Modals.Add(viewModel, window);
if (doWorkDinamicView != null)
{
DoWorkEventArgs eventArgs = new DoWorkEventArgs(window.Content);
backgoundworker.DoWork += (s, e) => doWorkDinamicView.Invoke(eventArgs);
}
else if (doWork != null)
{
backgoundworker.DoWork += (s, e) => { doWork.Invoke(); …
Run Code Online (Sandbox Code Playgroud) 处理计算量大的任务的常用 VB 方法是将其放入后台工作线程,而主线程继续处理 UI。
不管出于什么原因,我需要以相反的方式执行此操作:主线程执行繁重的工作,后台线程更新 UI。
这是我到目前为止所拥有的。唯一的问题是,虽然 UI 窗口 (Form1) 确实被重绘,但您无法与其交互,甚至无法移动它或调整其大小(鼠标光标变成沙漏状并且无法单击)。
Public Class ProgressDisplay
Private trd As Thread
Public Sub New()
trd = New Thread(AddressOf threadtask)
trd.Start()
End Sub
Private Sub threadtask()
Dim f1 As Form1
f1 = New Form1
f1.Show()
Do
f1.Update()
Thread.Sleep(100)
Loop
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
编辑:理想情况下,我需要向客户端呈现这样的界面
Public Class ProgressDisplay
Public Sub New()
Public Sub Update(byval progress as int)
End Class
Run Code Online (Sandbox Code Playgroud)
客户端将像这样调用它(实际上是在 COM 上的非托管 c++ 中,但你明白了):
Dim prog = new ProgressDisplay()
DoLotsOfWork(addressof prog.update) ' DoLotsOfWork method takes …
Run Code Online (Sandbox Code Playgroud) vb.net multithreading message-pump ui-thread applicationcontext
pythoncom.PumpMessages()
根据我的理解,这条线基本上告诉程序永远等待.为了我的目的,它似乎工作.但是,我希望能够在给定正确刺激的情况下结束该计划.如何结束上述行,或停止程序进一步运行.
message-pump ×4
python ×2
pythoncom ×2
.net ×1
exit ×1
hang ×1
showdialog ×1
ui-thread ×1
vb.net ×1
wpf ×1