我试图从其他类中运行的其他线程更新进度条.为了解释我的所作所为,我认为一张图片会更好.我想更新// HERE点的进度条:
我试过使用一个委托,尝试使用ReportProgress,我想我基本上已经尝试使用谷歌在前100个结果中报告的所有内容,但没有成功.我还在学习WPF,这可能是愚蠢的方式继续,我正在寻找一种快速而肮脏的方式来完成工作,但随时告诉我应该为更清洁的应用程序重新设计.
编辑:更多代码.
在ExecutorWindow.xaml.cs中:
public void RunExecutor()
{
// CREATE BACKGROUNDWORKER FOR EXECUTOR
execBackground.DoWork += new DoWorkEventHandler(execBackground_DoWork);
execBackground.RunWorkerCompleted += new RunWorkerCompletedEventHandler(execBackground_RunWorkerCompleted);
execBackground.ProgressChanged += new ProgressChangedEventHandler(execBackground_ProgressChanged);
execBackground.WorkerReportsProgress = true;
execBackground.WorkerSupportsCancellation = true;
// RUN BACKGROUNDWORKER
execBackground.RunWorkerAsync();
}
private void execBackground_DoWork(object sender, DoWorkEventArgs e)
{
myExecutor = new Executor(arg1, arg2);
myExecutor.Run();
}
private void execBackground_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("RunWorkerCompleted execBackground");
}
private void execBackground_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
ExecutorProgressBar.Value += 1;
}
// TESTING
private void updateProgressBar(int i)
{ …Run Code Online (Sandbox Code Playgroud) 我正在编写一个 NodeJS 应用程序,主要做两件事:
我希望能够异步运行这些外部程序,因为它们可能需要几分钟才能完成。当他们返回时,我想更新 Web GUI 以显示结果。这是非常基本的概念:

应该注意的是,用户可以同时运行多个具有不同参数的外部程序。
当外部程序完成时,我应该如何更新客户端(Web GUI):是否必须是客户端轮询更新(例如,如果结果在这里,则通过在数据库中查找)?或者有没有办法从服务器“推送”到客户端?
我还在研究实现此目的的设计示例,因此请随时提供有关此架构的建议和资源。
我正在尝试从txt文件中设置一个Listbox.我读取文件并填充列表,然后我想在列表框中显示它,但我没有可用的数据源选项(只有DataContext和DataContextChanged).
我的列表框在XAML中声明:
<ListBox Name="ScriptList"
Grid.Row="0"
Grid.Column="1"
TextBlock.FontSize="12"
Margin="2" />
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?
此外,它是正确的继续方式(读取文件 - >
如何在JS页面之间存储一些信息?
我的webapp使用sql查询来填充几页,这些查询通常会返回相同的结果.有没有办法将此结果存储在JS变量中,并仅在某些事件中强制刷新sql查询?
这与SQL查询的效率如何?与饼干?
我需要从我的应用程序运行多个外部可执行文件的实例。此可执行文件的平均运行时间约为 3 分钟。我想重定向这些进程的输出,并更新我的 GUI 中的进度条。当然,我不想等到他们回来才能继续使用我的应用程序。
我想我应该为每个实例创建一个线程,并在线程完成时更新我的进度条。
这是正确的方法吗?
另外,您是否推荐了一个很好的资源/文档来了解它是如何工作的?我只找到了http://www.dotnetperls.com/threadpool。
编辑:这些进程是基于网络的,即:运行时间可能会因链接延迟/带宽而有很大差异。
关于进度条,我想在每次进程完成时更新它。有处理程序吗?稍后我将根据流程输出添加更详细的更新,以增加每个执行步骤完成的进度。
编辑2:
感谢您的投入。由于我可能需要运行很多进程(最多 20 个),而且我不想使带宽饱和,我将最多并行运行 5 个进程。每次进程完成时,我都会增加进度计数器(对于我的进度条),然后运行另一个进程,直到它们全部完成,使用:
Process p = new Process();
p.StartInfo.FileName = pathToApp;
p.EnableRaisingEvents = true;
p.Exited += OnCalibrationProcessExited;
p.Start();
private void OnCalibrationProcessExited(object sender, EventArgs e)
{
runAnotherOne function
}
Run Code Online (Sandbox Code Playgroud)
这是正确的还是有更优雅的方法来实现这一目标?当然,我不希望我的应用程序在执行过程中被阻止。为此使用后台工作人员会更好吗?
c# ×3
wpf ×3
external ×2
architecture ×1
asynchronous ×1
datasource ×1
executable ×1
javascript ×1
listbox ×1
node.js ×1
process ×1
progress-bar ×1
session ×1