C#使用winform刷新界面的时候假死

gzyyan249 gzyyan249 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位大家好,现在我用后台线程来刷新界面,但是在数据量大的时候界面出现卡死现象,不知道如何解决,希望各位能给我一些建议,以下是程序的伪代码,希望各位能帮我看看,想想办法,谢谢!!

//当前类为一个winform类,假设是类A
Thread trd_Topic;//为全局变量
private delegate void FlushClient();//代理 为全局变量
FormDoc doc = null;//全局变量,为要刷新数据的UI
Begin()
{
....
trd_Topic = new Thread(CrossThreadFlush);
trd_Topic.IsBackground = true;
trd_Topic.Start();
....
}

private void CrossThreadFlush()
{
while (true)
{
if (trd_Topic.ThreadState == ThreadState.Stopped)
{ }
else
{
Thread.Sleep(2000);
net_Task();
}
}
}

private void net_Task()
{
monitorErrorCount = 0;
try
{
if (this.InvokeRequired)//等待异步
{
FlushClient fc = new FlushClient(net_Task);
this.BeginInvoke(fc);//通过代理调用刷新方法
}
else
{
....................
lock (OpenStations)
{
for (int i = 0; i < OpenStations.Count; i++)
{
try
{
foreach (Equ equ in Equs.Equipments)
{
if (equ.Species.Flag)
{
doc = this.DockPanel.FindDocument(name) as StationLayoutDoc;//doc为要刷新的UI,可以假设为类B
if (doc != null)
{
doc.Invoke(new EventHandler(getTopic), new object[] { equ, EventArgs.Empty });//getTopic 函数实现数据的读取已经doc界面的刷新
}
}
}
}
catch (Exception)
{

}
}
}
..............................
}
}
catch(Exception e)
{}
}


private void getTopic(object o, EventArgs e)
{
//......................获取数据的操作
doc.refresh(content, equ);//content获取到的刷新数据,equ为要刷新的设备
//.......................其他操作
}


现在在数据量较大的时候界面会出现卡死现象,现在trd_Topic好像还是用了主线程的资源,我现在不知道用什么方法能解决这个问题,希望各位能帮我出出主意,分数没有了,希望大家见谅,谢谢!!
...全文

相关推荐

C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法

主要介绍了C# WinForm程序处理后台繁忙导致前台控件假死现象解决方法,本文通过Application.DoEvents()解决这个问题,并讲解了Application.DoEvents()的作用,需要的朋友可以参考下

weixin_38586279

C# Winform部署YOLOv5 ONNX模型实战指南

在工业视觉与AI应用开发中,模型部署的工程化落地是关键环节。ONNX Runtime作为高性能推理引擎,通过统一的模型交换格式打通PyTorch等训练框架与C#等应用层之间的壁垒。它支持CPU/GPU多后端加速,且提供灵活的API接口,使开发者能够深度定制后处理逻辑,实现高效的目标检测推理。针对工控机等Windows环境,C# Winform结合OpenCvSharp与ONNX Runtime,可构建界面友好、实时性强的本地检测系统。本文以YOLOv5模型为例,系统讲解从模型导出、环境配置到Winform界

没吃药的小沙弥

C# WinForm多线程防止界面假死源码

C# WinForm多线程防止界面假死源码,代码里面包含显示进度的例子,针对多线程使用的一个很好例子。供初级人员参考。

断弯刀

C# 窗体(WInform)界面开发大全

C#界面设计典例,WInform界面开发系列的介绍,主要针对性介绍Winform开发过程中,经常用到的模块:数据字典模块、参数配置模块、权限管理模块的模块化应用,以及各模块的分合之道。

skty1314

winform(c#)最全60种非常漂亮界面样式\皮肤(经典)

winform(c#)最全60种非常漂亮界面样式\皮肤(经典)

lkskldkldsds
评论 10
收藏 已收藏
分享
返回顶部
gzyyan249
C# 111,129 成员 642,539 内容