欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:wpf線程中更新UI的4種方式

柚子快報(bào)邀請(qǐng)碼778899分享:wpf線程中更新UI的4種方式

http://yzkb.51969.com/

? ? ? ? 在wpf中,更新UI上面的數(shù)據(jù),那是必經(jīng)之路,搞不好,就是死鎖,或者沒反應(yīng),很多時(shí)候,都是嵌套的非常深導(dǎo)致的。但是更新UI的方式,有很多的種,不同的方式,表示的意思不一樣,但是眼睛看到的,似乎是一回事。

首先我們創(chuàng)建一個(gè)簡(jiǎn)單的wpf程序

業(yè)務(wù)就是,一直點(diǎn)擊確定,然后更新數(shù)據(jù)即可,比較簡(jiǎn)單,通過簡(jiǎn)單的案例來了解一個(gè)wpf中更新UI的4種方法。?

第一種:

點(diǎn)擊確定后,界面先變化Hello WPF11,再變化Hello WPF12,并且界面可以任意拖動(dòng)不卡。

這個(gè)方法是全局性質(zhì)的。

using System.Windows;

namespace WpfApp6Demo

{

///

/// Interaction logic for MainWindow.xaml

///

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private async void btnLogin_Click(object sender, RoutedEventArgs e)

{

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF11");

});

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF12");

});

}

private void UpdateTextBlock(string text)

{

System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>

{

txtUsername.Text = text;

}));

}

}

}

第二種:

點(diǎn)擊確定后,和前面的效果是一樣的。

這個(gè)方法是當(dāng)前界面性質(zhì)的。

using System.Windows;

namespace WpfApp6Demo

{

///

/// Interaction logic for MainWindow.xaml

///

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private async void btnLogin_Click(object sender, RoutedEventArgs e)

{

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF11");

});

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF12");

});

}

private void UpdateTextBlock(string text)

{

//System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>

//{

// txtUsername.Text = text;

//}));

this.Dispatcher.Invoke(new Action(() =>

{

txtUsername.Text = text;

}));

}

}

}

第三種:

點(diǎn)擊確定后,和前面的效果是一樣的。

這個(gè)方法是當(dāng)前控件性質(zhì)的。

using System.Windows;

namespace WpfApp6Demo

{

///

/// Interaction logic for MainWindow.xaml

///

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private async void btnLogin_Click(object sender, RoutedEventArgs e)

{

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF11");

});

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF12");

});

}

private void UpdateTextBlock(string text)

{

//System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>

//{

// txtUsername.Text = text;

//}));

//this.Dispatcher.Invoke(new Action(() =>

// {

// txtUsername.Text = text;

// }));

txtUsername.Dispatcher.Invoke(new Action(() =>

{

txtUsername.Text = text;

}));

}

}

}

第四種:?

點(diǎn)擊確定后,和前面的效果是一樣的。

這個(gè)方法是當(dāng)前控件性質(zhì)的,但是還對(duì)當(dāng)前控件進(jìn)行是否有訪問權(quán)限進(jìn)行了判斷。

using System.Windows;

namespace WpfApp6Demo

{

///

/// Interaction logic for MainWindow.xaml

///

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

private async void btnLogin_Click(object sender, RoutedEventArgs e)

{

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF11");

});

await Task.Run(() =>

{

// 耗時(shí)操作

Thread.Sleep(2000);

UpdateTextBlock("Hello WPF12");

});

}

private void UpdateTextBlock(string text)

{

//System.Windows.Application.Current.Dispatcher.Invoke(new Action(() =>

//{

// txtUsername.Text = text;

//}));

//this.Dispatcher.Invoke(new Action(() =>

// {

// txtUsername.Text = text;

// }));

//txtUsername.Dispatcher.Invoke(new Action(() =>

//{

// txtUsername.Text = text;

//}));

if (!txtUsername.Dispatcher.CheckAccess())

{

txtUsername.Dispatcher.Invoke(new Action(UpdateTextBlock), text);

}

else

{

txtUsername.Text = text;

}

}

}

}

以上都是以同步Invoke的方式進(jìn)行調(diào)用的,異步的話使用BeginInvoke。?

總結(jié):通過案例,可以了解到,上面4種方式,對(duì)于此案例來說都可以達(dá)到最終的效果,但是那一種效果最好,并沒有體現(xiàn)出來。博主認(rèn)為:第三種最好,原因是從這個(gè)需求上考慮的,因?yàn)樾枨笮枰碌木褪莟xtUsername上面的數(shù)據(jù),那么直接作用于它,對(duì)于資源的耗損,將是最少得??赡苡腥苏J(rèn)為第四種方式最好,進(jìn)行了線程判斷,似乎更加的安全,那么您認(rèn)為呢???

本文來源:

wpf線程中更新UI的4種方式-CSDN博客

柚子快報(bào)邀請(qǐng)碼778899分享:wpf線程中更新UI的4種方式

http://yzkb.51969.com/

文章來源

評(píng)論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19428655.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄