小编ack*_*k__的帖子

WPF C# - 从另一个线程更新进度条

我试图从其他类中运行的其他线程更新进度条.为了解释我的所作所为,我认为一张图片会更好.我想更新// 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)

c# wpf multithreading progress-bar

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

Nodejs如何在外部程序返回后更新客户端?

我正在编写一个 NodeJS 应用程序,主要做两件事:

  • 运行 Web GUI(简单的 HTML/JS)
  • 根据用户输入运行外部程序(二进制文件)

我希望能够异步运行这些外部程序,因为它们可能需要几分钟才能完成。当他们返回时,我想更新 Web GUI 以显示结果。这是非常基本的概念:

在此输入图像描述

  1. 用户输入参数并按下操作按钮。
  2. 服务器使用用户的参数运行外部程序。
  3. 当程序返回时,服务器获取输出(XML 文件)并将内容放入数据库中。
  4. 然后,服务器使用数据库中的结果更新客户端。

应该注意的是,用户可以同时运行多个具有不同参数的外部程序。

当外部程序完成时,我应该如何更新客户端(Web GUI):是否必须是客户端轮询更新(例如,如果结果在这里,则通过在数据库中查找)?或者有没有办法从服务器“推送”到客户端?

我还在研究实现此目的的设计示例,因此请随时提供有关此架构的建议和资源。

architecture executable asynchronous external node.js

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

什么是WPF ListBox的DataSource的等价物?

我正在尝试从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)

知道为什么吗?

此外,它是正确的继续方式(读取文件 - >

c# wpf datasource listbox

4
推荐指数
1
解决办法
4952
查看次数

如何在网页之间存储数据?

如何在JS页面之间存储一些信息?

我的webapp使用sql查询来填充几页,这些查询通常会返回相同的结果.有没有办法将此结果存储在JS变量中,并仅在某些事件中强制刷新sql查询?

这与SQL查询的效率如何?与饼干?

javascript session web-applications session-state

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

C# 并行运行多个非阻塞外部程序

我需要从我的应用程序运行多个外部可执行文件的实例。此可执行文件的平均运行时间约为 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# wpf multithreading external process

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