C#一直更新textbox内容,界面假死

起名什么的很麻烦 2016-11-10 09:56:43
一直执行
VEL_textBox.Text = VEL.ToString();

界面操作下就死机了.
...全文
1566 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
john_QQ:2335298917 2016-11-10
  • 打赏
  • 举报
回复
引用 12 楼 daixf_csdn 的回复:
方法很多 1、你用线程可以,但跨线程操作UI控件,应该用BeinInvoke()

this.BeginInvoke(new Action(() =>
                {
                        VEL_textBox.Text = VEL.ToString();
                }));
2、如p哥所说,使用INotifyPropertyChanged

public partial class FormTest : Form, INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
        private string bindingValue;
        public string BindingValue
        {
            get { return bindingValue; }
            set 
            { 
                bindingValue = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("BindingValue"));
            }
        }

        //首次绑定
        private void button55_Click(object sender, EventArgs e)
        {
            BindingValue = "aaaa";
            label14.DataBindings.Add("Text", this, "BindingValue", false, DataSourceUpdateMode.OnPropertyChanged);
        }

        //后续修改
        private void button56_Click(object sender, EventArgs e)
        {
            BindingValue = "33333333";
        }
顶一下,非UI线程更新UI要用invoke或者begininvoke
圣殿骑士18 2016-11-10
  • 打赏
  • 举报
回复
方法很多 1、你用线程可以,但跨线程操作UI控件,应该用BeinInvoke()

this.BeginInvoke(new Action(() =>
                {
                        VEL_textBox.Text = VEL.ToString();
                }));
2、如p哥所说,使用INotifyPropertyChanged

public partial class FormTest : Form, INotifyPropertyChanged

public event PropertyChangedEventHandler PropertyChanged;
        private string bindingValue;
        public string BindingValue
        {
            get { return bindingValue; }
            set 
            { 
                bindingValue = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("BindingValue"));
            }
        }

        //首次绑定
        private void button55_Click(object sender, EventArgs e)
        {
            BindingValue = "aaaa";
            label14.DataBindings.Add("Text", this, "BindingValue", false, DataSourceUpdateMode.OnPropertyChanged);
        }

        //后续修改
        private void button56_Click(object sender, EventArgs e)
        {
            BindingValue = "33333333";
        }
  • 打赏
  • 举报
回复
引用 4 楼 zhi_ai_yaya 的回复:
[quote=引用 3 楼 w492901074 的回复:] [quote=引用 1 楼 zhi_ai_yaya 的回复:] 一秒钟赋值几千次?
在主界面里,弄了个线程,线程程序
while(1)
VEL_textBox.Text = VEL.ToString();
[/quote] 非UI线程更新控件值,没报错吗?! 就算去掉线程验证没报错,那也是死循环,能不卡顿麽[/quote] 实时检测采集的变量 double VEL并显示在VEL_textBox.Text上面. 主界面显示 进程1采集数据 进程2更新VEL_textBox.Text.不操作界面不死机.一操作界面就死了.
  • 打赏
  • 举报
回复
引用 5 楼 beautiful_melody 的回复:
你这是个死循环啊,利用自身的值又给自身复制。。。。你要体现什么逻辑呢
这是个死循环,后面的理解错了
  • 打赏
  • 举报
回复
引用 5 楼 beautiful_melody 的回复:
你这是个死循环啊,利用自身的值又给自身复制。。。。你要体现什么逻辑呢
实时检测采集的变量 double VEL并显示在VEL_textBox.Text上面. 主界面显示 进程1采集数据 进程2更新VEL_textBox.Text.不操作界面不死机.一操作界面就死了.
  • 打赏
  • 举报
回复 1
引用 5 楼 beautiful_melody 的回复:
你这是个死循环啊,利用自身的值又给自身复制。。。。你要体现什么逻辑呢
其实这个逻辑很简单、很“普遍”。比如说一个小孩儿要不断地吃糖,她就缠着大人不许打人去上班,全职地供她吃喝,完全不管大人从此就废了——假死了。这个逻辑体现了幼稚的“纠缠”逻辑,以为这样就能“监控” VEL 变量的修改了。
  • 打赏
  • 举报
回复
知道一点“线程”概念,就像疯了一样,滥用这个词儿,毫无是处。 要触发一个事件,你将你的 VEL 设计为“属性”并且触发事件就行了。最多实现 INotifyPropertyChaned 接口。规范地协同设计程序,跟“线程”没有什么关系。 总以为“监视”这个概念多么地疯狂、多么地高大上,遇事总想监视变量,于是烂用线程概念。其实从一开始就没学会正常地知识。
  • 打赏
  • 举报
回复
引用 2 楼 w492901074 的回复:
[quote=引用 1 楼 zhi_ai_yaya 的回复:] 一秒钟赋值几千次?
在主界面里,弄了个线程,线程程序
VEL_textBox.Text = VEL.ToString();
[/quote] 线程是什么鬼?
beautiful_melody 2016-11-10
  • 打赏
  • 举报
回复
你这是个死循环啊,利用自身的值又给自身复制。。。。你要体现什么逻辑呢
我叫小菜菜 2016-11-10
  • 打赏
  • 举报
回复
引用 3 楼 w492901074 的回复:
[quote=引用 1 楼 zhi_ai_yaya 的回复:] 一秒钟赋值几千次?
在主界面里,弄了个线程,线程程序
while(1)
VEL_textBox.Text = VEL.ToString();
[/quote] 非UI线程更新控件值,没报错吗?! 就算去掉线程验证没报错,那也是死循环,能不卡顿麽
  • 打赏
  • 举报
回复
引用 1 楼 zhi_ai_yaya 的回复:
一秒钟赋值几千次?
在主界面里,弄了个线程,线程程序
while(1)
VEL_textBox.Text = VEL.ToString();
  • 打赏
  • 举报
回复
引用 1 楼 zhi_ai_yaya 的回复:
一秒钟赋值几千次?
在主界面里,弄了个线程,线程程序
VEL_textBox.Text = VEL.ToString();
我叫小菜菜 2016-11-10
  • 打赏
  • 举报
回复
一秒钟赋值几千次?
  • 打赏
  • 举报
回复
结贴,谢谢#4楼,谢谢#7楼 最后感谢#12楼的总结,适合小白看也就是本人
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
[quote=引用 5 楼 beautiful_melody 的回复:] 你这是个死循环啊,利用自身的值又给自身复制。。。。你要体现什么逻辑呢
其实这个逻辑很简单、很“普遍”。比如说一个小孩儿要不断地吃糖,她就缠着大人不许打人去上班,全职地供她吃喝,完全不管大人从此就废了——假死了。这个逻辑体现了幼稚的“纠缠”逻辑,以为这样就能“监控” VEL 变量的修改了。[/quote] 是假死了,CPU占用过高. 其实您用2句例子就能说清楚的,就像12楼.
  • 打赏
  • 举报
回复
引用 4 楼 zhi_ai_yaya 的回复:
[quote=引用 3 楼 w492901074 的回复:] [quote=引用 1 楼 zhi_ai_yaya 的回复:] 一秒钟赋值几千次?
在主界面里,弄了个线程,线程程序
while(1)
VEL_textBox.Text = VEL.ToString();
[/quote] 非UI线程更新控件值,没报错吗?! 就算去掉线程验证没报错,那也是死循环,能不卡顿麽[/quote] 你说的对的,我理解了,加了begininvoke操作 再加延时函数避免CPU占用过多.
引用 14 楼 zhi_ai_yaya 的回复:
直接上个BackgprupWorker组件,小白专用的多线程组件。既然不熟练就不要碰Thread。 如果wpf,当然是绑定是最简单快捷的
这个有机会看下.
我叫小菜菜 2016-11-10
  • 打赏
  • 举报
回复
直接上个BackgprupWorker组件,小白专用的多线程组件。既然不熟练就不要碰Thread。 如果wpf,当然是绑定是最简单快捷的

110,536

社区成员

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

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

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