using System; using System.ComponentModel; using System.Diagnostics; using System.Windows.Controls; using System.Windows.Threading; namespace PackageUploader { /// /// WinMFMUploadProcress.xaml 的交互逻辑 /// public partial class WinMFMUploadProcress :INotifyPropertyChanged { private double m_ProgressLeft; public WinMFMUploadProcress() { InitializeComponent(); m_ProgressLeft=Canvas.GetLeft(progressBar); this.DataContext = this; //var lblwidth = lblpresent.Width; //Canvas.SetLeft(lblpresent, m_ProgressLeft - (lblwidth / 2.0)); } private string m_FloorName; public string FloorName { get { return m_FloorName; } set { m_FloorName = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("FloorName")); } } private string m_LabelPath; public string LabelPath { get { return m_LabelPath; } set { m_LabelPath = value; PropertyChanged?.Invoke(this,new PropertyChangedEventArgs("LabelPath")); } } private string m_Present; public string Present { get { return m_Present; } set { m_Present = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Present")); } } //public string FloorName //{ // set { txtFloorName.Content = value; } //} //public string LabelPath //{ // set { txtPath.Text = value; } //} public int Count { get; set; } public int Cur { get; set; } public event PropertyChangedEventHandler PropertyChanged; public void Update(string currentData) { //lblpresent.Content = Present; //Present = currentData; this.Dispatcher.Invoke(() => { lblpresent.Content = currentData + "%"; }, DispatcherPriority.Background); //DispatcherFrame nestedFrame = new DispatcherFrame(); //DispatcherOperation exitOperation = Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background, exitFrameCallback, nestedFrame); //Dispatcher.PushFrame(nestedFrame); //if (exitOperation.Status != // DispatcherOperationStatus.Completed) //{ // exitOperation.Abort(); //} //lblpresent.Dispatcher.Invoke(() => { lblpresent.Content = currentData + "%"; }, // DispatcherPriority.Background); //this.Dispatcher.Invoke(() => { lblpresent.Content = currentData + "%"; }, DispatcherPriority.Background); //var progresswidth = progressBar.Width; //var progressleft = Canvas.GetLeft(progressBar); //var lblwidth = lblpresent.Width; ////Canvas.SetLeft(lblpresent, progressleft + progresswidth * (currentData / 100.0) - (lblwidth / 2.0))), DispatcherPriority.Background //Dispatcher.Invoke( // new Action(() => // { // lblpresent_Total.Content = $"({Cur}/{Count})"; // lblpresent.Content = currentData + "%"; // } ), DispatcherPriority.Background); //Dispatcher.Invoke( // new Action(() => Canvas.SetLeft(lblpresent, progressleft + progresswidth * (currentData / 100.0) - (lblwidth / 2.0))),DispatcherPriority.Background); //Canvas.SetLeft(lblpresent, progressleft+progresswidth*(currentData/100.0)-(lblwidth/2.0)); //Dispatcher.Invoke( // new Action((db, value) => this.progressBar.SetValue(db, value)), // System.Windows.Threading.DispatcherPriority.Background, // RangeBase.ValueProperty, Convert.ToDouble(currentData)); } private static DispatcherOperationCallback exitFrameCallback = new DispatcherOperationCallback(ExitFrame); private static Object ExitFrame(Object state) { DispatcherFrame frame = state as DispatcherFrame; frame.Continue = false; return null; } } }