Làm sao để cập nhật trạng thái, dữ liệu trên giao diện phần mềm nếu phần mềm của bạn chạy đa luồng (Multithreading). Cách đơn giản nhất là dùng Data binding, mà ví dụ của tôi ở đây là sử dụng lớp INotifyPropertyChanged.
Namespace: System.ComponentModel;
Lớp interface này có duy nhất 1 thành viên là
public event PropertyChangedEventHandler PropertyChanged;
Để thực thi interface này, bạn cần implement phương thức PropertyChanged.
Ví dụ: Link MediaFire
Namespace: System.ComponentModel;
Lớp interface này có duy nhất 1 thành viên là
public event PropertyChangedEventHandler PropertyChanged;
Để thực thi interface này, bạn cần implement phương thức PropertyChanged.
namespace INotificationAndWaitOne { public class Settings : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; public Settings() { } private string _status="alo"; public string Status { get { return _status; } set { _status = value; OnPropertyChanged("Status"); } } protected void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } } }Ở đây bạn chú ý mình dùng namespace INotificationAndWaitOne. Để binding dữ liệu lên giao diện, bạn cần khai báo namespace chứa class Settings
<Window x:Class="INotificationAndWaitOne.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:logic="clr-namespace:INotificationAndWaitOne" Title="Multithread" Height="350" Width="525"> <Label Content="{Binding Source={x:Static logic:AppSettings.Settings}, Path=Status, Mode=OneWay}" Height="28" HorizontalAlignment="Left" Margin="126,37,0,0" Name="lblStatus" VerticalAlignment="Top" Width="231" />Dòng cần khai báo: xmlns:logic="clr-namespace:INotificationAndWaitOne". Để cập nhật trạng thái lên giao diện, bạn chỉ đơn giản việc gọi class Settings và gán giá trị cho property cần binding.
AppSettings.Settings.Status = enumStatus.Success.ToString();Lưu ý: Bạn chỉ thực hiện binding data chỉ với properties
Ví dụ: Link MediaFire
Nhận xét
Đăng nhận xét