winform跨线程访问控件 winform更新UI控件的时间过长导致假死?
winform更新UI控件的时间过长导致假死?
可以用多线程,委托创建控件的那个线程来更新控件就可以了。
if (dataGridView1.InvokeRequired) { //判断当前线程是否必须调用invoke来更新控件 dataGridView1.Invoke(new Action(() => { //委托创建控件的线程进行更新控件 dataGridView1.BackgroundColor = Color.Black//更新控件操作 }))}
请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?
做windows桌面应用当然是c#。
c#是.net框架下主力语言,与windows系统的集成度很高,win7,win8,win10都自带.net框架,根本就不需要什么依赖,c#语言目前已经更新到8.0版本,采用vs来开发桌面程序简直太完美,不管是winform还是wpf这两个都是一二十年很成熟的桌面程序框架,拖拖控件就能开发,效率高。wpf自定义程度高,可以设计出精美的ui界面来,一点不输web界面,而且还有配套的bland设计器来辅助做ui界面。
目前winform,wpf这两个桌面框架都已经支出.netcore,这是一个新出的垮平台框架,所以我觉得做桌面开发c#是首选。
以上我的看法,大家有什么想法也可以一起讨论。
C#多线程与UI响应跨线程更新UI?
当然是自己添加消息映射了。将UI的句柄或窗口指针传递进线程,然后在线程中PostMessage(),UI的类中添加消息映射和消息处理函数。
C# winform多线程异步更新UI?
首先在窗体上放一个button和一个picturebox
(picturebox visible为false)这个多线程的目的是点击按钮后图片正常的运行,另一线程在睡眠10秒后在执行。
private void button1_Click(object sender, EventArgs e)
{
//开启线程
System.Threading.Thread thread = new System.Threading.Thread(new System.Threading.ThreadStart(this.Result))
pictureBox1.Visible = true
button1.Enabled = false
thread.Start()
}
private void Result()
{
bool ok = this.Do()
this.BeginInvoke(new System.Threading.ThreadStart(delegate()
{
if (ok) MessageBox.Show("成功", "提示")
else MessageBox.Show("失败", "提示")
pictureBox1.Visible = false
button1.Enabled = true
}))
}
private bool Do()
{
System.Threading.Thread.Sleep(10000)
return true
}
有人说WPF比winform强大很多,可为什么很少转的?
因为WPF学习成本高啊!首先XAML就需要你花费不少的时间学!然后就是Blend设计UI动画也需要学!后台代码也需要学!还有WPF的专属特性也要学啊!winform 相对来说入门简单!但是winform弊端很明显它是基于GDI绘图,如果电脑显卡不好!UI会非常卡!无法用的那种!如果显示器是高分屏那就更不用说了!直接凉凉!模糊看不清加UI延迟!要命!WPF现在已经支持.NetCore3.0了!还是很值得学习的!
那些说WPF不好的人都是不懂WPF的人!(我可以说门外汉吗?)
winform跨线程访问控件 winform异步更新界面 wpf ui框架
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。