winform跨線程訪問控件 winform更新UI控件的時間過長導(dǎo)致假死?
winform更新UI控件的時間過長導(dǎo)致假死?可以用多線程,委托創(chuàng)建控件的那個線程來更新控件就可以了。if (dataGridView1.InvokeRequired) { //判斷當(dāng)前線程是否必須調(diào)
winform更新UI控件的時間過長導(dǎo)致假死?
可以用多線程,委托創(chuàng)建控件的那個線程來更新控件就可以了。
if (dataGridView1.InvokeRequired) { //判斷當(dāng)前線程是否必須調(diào)用invoke來更新控件 dataGridView1.Invoke(new Action(() => { //委托創(chuàng)建控件的線程進(jìn)行更新控件 dataGridView1.BackgroundColor = Color.Black//更新控件操作 }))}
請問目前做windows桌面應(yīng)用程序,MFC、QT、C#哪個更好?
做windows桌面應(yīng)用當(dāng)然是c#。
c#是.net框架下主力語言,與windows系統(tǒng)的集成度很高,win7,win8,win10都自帶.net框架,根本就不需要什么依賴,c#語言目前已經(jīng)更新到8.0版本,采用vs來開發(fā)桌面程序簡直太完美,不管是winform還是wpf這兩個都是一二十年很成熟的桌面程序框架,拖拖控件就能開發(fā),效率高。wpf自定義程度高,可以設(shè)計出精美的ui界面來,一點不輸web界面,而且還有配套的bland設(shè)計器來輔助做ui界面。
目前winform,wpf這兩個桌面框架都已經(jīng)支出.netcore,這是一個新出的垮平臺框架,所以我覺得做桌面開發(fā)c#是首選。
以上我的看法,大家有什么想法也可以一起討論。
C#多線程與UI響應(yīng)跨線程更新UI?
當(dāng)然是自己添加消息映射了。將UI的句柄或窗口指針傳遞進(jìn)線程,然后在線程中PostMessage(),UI的類中添加消息映射和消息處理函數(shù)。
C# winform多線程異步更新UI?
首先在窗體上放一個button和一個picturebox
(picturebox visible為false)這個多線程的目的是點擊按鈕后圖片正常的運行,另一線程在睡眠10秒后在執(zhí)行。
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強大很多,可為什么很少轉(zhuǎn)的?
因為WPF學(xué)習(xí)成本高啊!首先XAML就需要你花費不少的時間學(xué)!然后就是Blend設(shè)計UI動畫也需要學(xué)!后臺代碼也需要學(xué)!還有WPF的專屬特性也要學(xué)啊!winform 相對來說入門簡單!但是winform弊端很明顯它是基于GDI繪圖,如果電腦顯卡不好!UI會非??ǎo法用的那種!如果顯示器是高分屏那就更不用說了!直接涼涼!模糊看不清加UI延遲!要命!WPF現(xiàn)在已經(jīng)支持.NetCore3.0了!還是很值得學(xué)習(xí)的!
那些說WPF不好的人都是不懂WPF的人?。ㄎ铱梢哉f門外漢嗎?)