各位大佬,请问C#如何将一个现有软件的进度条映射到winform中progresbar控件作为进度值?

Helloworld3020 2020-08-04 02:42:11
详细需求是将另一个应用软件(ABC)中的进度条同步映射到winform中的进度条上并在软件ABC,目前我通过while循环获得了软件ABC中进度条的百分比数字result,但result暂时只是循环的内部变量,不知道如何将result实时传递给winform的进度条控件实时显示。求各位大佬不吝赐教,指导一下小白。由于是还在入门的小白,最好是有代码可以参考,不然只有思路的话可能听不太懂,谢谢!
问题分解一下如下:
1)如何将result传递到外部函数并实现同步打印出来;
2)如何将result传递给progressbar控件作为进度值显示;


获取result的代码如下。

AutomationElement formABC = null;
AutomationElement root = AutomationElement.RootElement;
int numWait = 0;
do
{
formABC = root.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, "ABC));
Thread.Sleep(50);
numWait++;
} while (numWait < 500 && null == formABC);
if (null == formABC)
{
throw new NullReferenceException("Could not find ABC");
}
else
{
AutomationElement formProgramming = formDPS.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.NameProperty, "Programming1"));
AutomationElement textPercent = formProgramming.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "1031"));
AutomationElement textElapsedTime = formProgramming.FindFirst(TreeScope.Descendants, new PropertyCondition(AutomationElement.AutomationIdProperty, "1032"));
while (!errorFlag && !successFlag)
{
string percent = UIA.TextGet(textPercent);
string time = UIA.TextGet(textElapsedTime);
Console.WriteLine("{0},{1}", percent, time);
int result = Convert.ToInt32(Regex.Replace(percent, @"[^0-9]+", ""));
//Console.WriteLine(result);
Thread.Sleep(1000);
...全文
2230 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Helloworld3020 2020-08-05
  • 打赏
  • 举报
回复
引用 4 楼 datafansbj 的回复:
[quote=引用 2 楼 Helloworld3020 的回复:]补充一下,我尝试把result在外部定义成了private static int result,同时使用parallel.invoke(上述代码对应的方法,新建打印result的方法)以图能将result同步打印出来,但是失败了。运行的时候新建打印result的方法没有执行。
不明白你的意思。能打印出来,那么到底是成功了还是失败了?result 的值正常吗? 到底是能取到进度的值,只是在打印时出错了,还是根本取不到值?这是两个完全不相干的问题。[/quote] 定义成了private static int result后使用invoke无法通过新建的打印result的方法打印出result结果,我感觉是没有取到result的值。
datafansbj 2020-08-05
  • 打赏
  • 举报
回复
单步调式一下这句:
Console.WriteLine("{0},{1}", percent, time);

percent 的值正确吗?如果正确,那么你的取值没有问题。至于打印,说具体点,真的打印到打印机吗?
datafansbj 2020-08-04
  • 打赏
  • 举报
回复
引用 2 楼 Helloworld3020 的回复:
补充一下,我尝试把result在外部定义成了private static int result,同时使用parallel.invoke(上述代码对应的方法,新建打印result的方法)以图能将result同步打印出来,但是失败了。运行的时候新建打印result的方法没有执行。


不明白你的意思。能打印出来,那么到底是成功了还是失败了?result 的值正常吗?
到底是能取到进度的值,只是在打印时出错了,还是根本取不到值?这是两个完全不相干的问题。
鸡窝里的毛 2020-08-04
  • 打赏
  • 举报
回复
跨进程通讯,大概只能用勾子程序了,拦截A程序的进度条消息,再显示到B程序上。
Helloworld3020 2020-08-04
  • 打赏
  • 举报
回复
补充一下,我尝试把result在外部定义成了private static int result,同时使用parallel.invoke(上述代码对应的方法,新建打印result的方法)以图能将result同步打印出来,但是失败了。运行的时候新建打印result的方法没有执行。
datafansbj 2020-08-04
  • 打赏
  • 举报
回复
既然得到了进度值,把它赋值给其他进度条组件就行了:Processbar1.Value = result。
如果涉及跨线程调用,记得使用 invoke。
内容概要:本文系统研究了双环模型预测控制(MPC)在表贴式永磁同步电机(SPMSM)的应用,聚焦于转速-电流双环控制结构的建模与Simulink仿真实现。通过建立电机的离散化数学模型,结合模型预测控制理论,详细阐述了预测模型构建、目标函数设计、约束条件处理及优化求解等核心环节,实现了对电机转速与电流的高性能动态调控。研究在Simulink环境搭建了完整的仿真系统,验证了所提控制策略在动态响应速度、抗干扰能力及稳态精度方面的显著优势,充分展现了MPC在高精度电机驱动领域的应用潜力,为先进电机控制技术的工程化提供了有效的理论依据与实践参考。; 适合人群:具备自动控制理论、电机控制基础知识及Simulink仿真操作经验的电气工程、自动化、电力电子等相关专业的研究生、科研人员和工程技术人员。; 使用场景及目标:①用于高校及科研机构开展先进电机控制算法的教学演示与科研攻关;②为工业界对高动态性能、高精度要求的电机驱动系统(如数控机床、机器人、新能源汽车电驱动系统)的设计与优化提供技术验证平台;③支撑永磁同步电机在高端制造、绿色能源等战略新兴产业的先进控制技术研发。; 阅读建议:读者应结合提供的Simulink仿真模型进行深入探究,重点关注预测时域、控制时域、权重系数等关键参数的整定方法及其对系统整体性能的影响机制,建议通过设置不同工况、引入外部扰动等方式进行对比仿真实验,以深化对模型预测控制内在机理的理解与掌握。
内容概要:本文围绕“基于多VSG独立微网的多目标二次控制MATLAB模型研究”展开,详细阐述了利用Simulink对多虚拟同步发电机(VSG)构成的独立微网系统进行建模与仿真,实现频率调节、电压支撑与有功无功功率均分等多目标协同优化的二次控制策略。研究引入先进的最优控制算法,解决微网在孤岛运行模式下的功率动态分配、频率电压恢复及系统稳定性问题,并通过MATLAB/Simulink平台构建完整仿真模型,验证所提控制策略在不同负载扰动下的有效性、鲁棒性与动态响应性能。; 适合人群:具备电力系统分析、现代控制理论基础以及MATLAB/Simulink仿真能力的电气工程、自动化等相关专业的硕士研究生、科研人员及从事微网控制系统开发的工程技术人才。; 使用场景及目标:① 深入理解多VSG在独立微网的并联运行机理与协同控制架构;② 掌握基于Simulink的微网二次控制系统的建模方法与仿真流程;③ 实现频率、电压与功率分配的多目标优化控制仿真验证;④ 为微网控制系统的设计、算法优化及科研课题提供可靠的仿真依据和技术参考。; 阅读建议:建议读者结合文控制策略,动手搭建Simulink模型,重点关注控制器参数整定对系统动态性能的影响,可通过对比不同工况下的仿真结果,进一步优化控制算法以提升系统鲁棒性与响应精度。
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!
【重要提示】本资源设置为0积分下载,若非0积分请勿轻易下载 亲爱的CSDN用户: 首先感谢你点进这个资源页面。我需要提前说明一个重要情况: 本资源原本已设置为“0积分下载”,即作者希望完全免费共享。但CSDN平台有时会根据文件的下载热度、文件大小、用户权限等因素,自动将部分资源的积分调整为非0数(如1积分、2积分、5积分等)。这是平台系统的自动行为,而非作者本人的设定。 因此,如果你当前看到该资源的下载所需积分不是0(例如显示为1、2、3……),请谨慎决定是否下载。 如果你按照非0积分支付并下载后发现资源内容不符合预期、链接失效,或者实际上该资源本应是免费的,作者无法为此承担积分损失或退还操作。强烈建议:仅在页面显示为0积分时进行下载。 另外,本资源描述并未直接提供具体的下载地址或外部链接,因为它本身是一个通过CSDN官方上传通道提交的文件/内容包。如果你看到描述没有外部网盘地址,这是正常的——资源文件应通过CSDN内置的“下载”按钮获取。若因平台积分显示异常导致你支付了积分,请优先联系CSDN客服咨询积分退还政策,作者没有权限修改平台自动设定的积分。 感谢你的理解与支持。技术分享本应开放,但受限于平台规则,特此提醒如上。祝学习进步!

111,130

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧