C#自定义控件构造函数内内启动线程导致控件添加即运行线程

如题,用C#写的自定义控件在构造函数内启动线程或Timer等循环会导致控件添加到程序即启动(程序没有运行);
需求是需要一个控件循环监视一个对象并把监视结果以颜色显示;
控件一添加即运行感觉很怪也不合理,不知如何等到程序运行再启动控件内循环?图片说明

2个回答

首先你得让你的控件继承Component类
like this
图片说明

之后你就可以有一个这个属性,就是你需要的东西
图片说明
这个属性为True的话,代表当前处在VS的设计模式,你可以直接把你的初始化代码return掉,如果为False说明程序已经运行

sns1991sns
宇云雨巷 谢谢,给了我答案
10 个月之前 回复

可以使用AutoResetEvent来控制执行的顺序:
public static AutoResetEvent autoResetEvent = new AutoResetEvent(false);
autoResetEvent.WaitOne();//在需要等待执行的地方添加,当程序执行到此处时,就会处于等待状态,直到下面的语句执行,发送信号过来才会继续执行
autoResetEvent.Set();//在启动程序之后添加,控制等待的语句在需要的时间执行。

xy943294069
sunny被注册 回复燕双嘤嘤: https://download.csdn.net/download/xy943294069/10909257
一年多之前 回复
xy943294069
sunny被注册 public TCPState() { InitializeComponent(); //减少控件的闪烁 SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); timer.Interval = 50; timer.Tick += new EventHandler(MonitorState); timer.Enabled = true; }
一年多之前 回复
xy943294069
sunny被注册 public TCPState() { InitializeComponent(); //减少控件的闪烁 SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint, true); SetStyle(ControlStyles.OptimizedDoubleBuffer, true); timer.Interval = 50; timer.Tick += new EventHandler(MonitorState); timer.Enabled = true; }
一年多之前 回复
weixin_37486553
燕双嘤嘤 回复sunny被注册: 把构造函数的代码贴出来看看
一年多之前 回复
xy943294069
sunny被注册 这样是可以解决问题,但这个当初的想法就是做个控件配置下属性面板就可以,不需要写代码,简化使用
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问