【问题标题】:Keep gnuplot plot window open after external execution with C#使用 C# 外部执行后保持 gnuplot 绘图窗口打开
【发布时间】:2018-06-19 22:05:37
【问题描述】:

我想要实现的是一个绘图窗口,它不断更新(因为我的数据文件不断变化)并保持打开状态,直到我手动关闭它。

我的 gnuplot 脚本以:

结尾
...
pause 0.5 
reread

如果我从 命令行 使用此脚本调用 gnuplot,它会按预期工作

但是,如果我 通过 C# 调用 gnuplot 并将相同的脚本作为参数传递,则绘图窗口打开 0.5 秒并在之后立即关闭。 我使用以下代码来实现这一点:

Process plotProcess = new Process();
plotProcess.StartInfo.FileName = @"""C:\Program Files\gnuplot\bin\gnuplot.exe""";
plotProcess.StartInfo.UseShellExecute = false;
plotProcess.StartInfo.RedirectStandardInput = true;
plotProcess.StartInfo.CreateNoWindow = true;
plotProcess.Start();
StreamWriter sw = plotProcess.StandardInput;
String strInputText = @"GNUPLOTSCRIPT;pause 0.5;reread";
sw.WriteLine(strInputText);                      
sw.Flush();                 
sw.Close();

鉴于 gnuplot 脚本可以从命令行运行,我假设我没有为 plotProcess 调用正确的扩展方法。为了解决这个问题,我尝试了(不同的顺序)以下

...
plotProcess.WaitForExit();
//sw.Flush();                 
//sw.Close();

这要么无济于事,要么完全冻结我的进程,直到我不得不从任务管理器中终止它。
我很高兴有任何建议。

【问题讨论】:

    标签: c# plot process gnuplot continuous


    【解决方案1】:

    您是否尝试在 gnuplot 命令中添加“-persist”或更短的“-p”标志? IE。

    plotProcess.StartInfo.FileName = @"""C:\Program Files\gnuplot\bin\gnuplot.exe -persist""";
    

    这应该告诉 gnuplot 即使在脚本完成后也保持绘图窗口打开。或者,您可以将 gnuplot 脚本中的输出设置为持久。参见例如here 了解更多选项。

    【讨论】:

    • 如果我像你建议的那样通过--persist-p,绘图窗口根本不会显示。我知道您分享的帖子中建议的选项,不幸的是,它们都不起作用——绘图窗口要么不显示,要么立即关闭。到目前为止,我可以通过传递pause 10 让窗口保持打开状态 10 秒,但是,随着文件的更改,绘图不会更新。
    • 如果您在 c# 程序之外调用 gnuplot,persist 选项是否有效?这可能是 Windows 中 gnuplot 的问题,参见例如this answerthis bug report。两者都很老了,所以我只是猜测在 gnuplot 中更改终端可能会有所帮助。
    • 是的,persist 在 C# 之外工作。我会看看 x11 终端是否有助于解决这个问题,但这是一个烦人的解决方法,我认为应该有一种开箱即用的方法。
    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-12
    • 1970-01-01
    • 2010-12-26
    相关资源
    最近更新 更多