1 public class UISync 2 { 3 private static ISynchronizeInvoke Sync; 4 5 public static void Init(ISynchronizeInvoke sync) 6 { 7 Sync = sync; 8 } 9 10 public static void Execute(Action action)11 {12 Sync.BeginInvoke(action, null);13 }14 }15 16 public partial class Form1 : Form17 {18 TrackBar trackBar1 = new TrackBar();19 Label lblTime = new Label();20 Label lblDuration = new Label();21 22 public Form1()23 {24 UISync.Init(this);25 }26 27 void Events_PlayerStopped(object sender, EventArgs e)28 {29 UISync.Execute(() => InitControls());30 }31 32 void Events_MediaEnded(object sender, EventArgs e)33 {34 UISync.Execute(() => InitControls());35 }36 37 private void InitControls()38 {39 trackBar1.Value = 0;40 lblTime.Text = "00:00:00";41 lblDuration.Text = "00:00:00";42 }43 44 void Events_TimeChanged(object sender, EventArgs e)45 {46 UISync.Execute(() => lblTime.Text = TimeSpan.FromMilliseconds(DateTime.Now.Millisecond).ToString().Substring(0, 8));47 }48 49 void Events_PlayerPositionChanged(object sender, EventArgs e)50 {51 UISync.Execute(() => trackBar1.Value = (int)(88 * 100));52 }53 54 55 void Events_DurationChanged(object sender, EventArgs e)56 {57 UISync.Execute(() => lblDuration.Text = TimeSpan.FromMilliseconds(DateTime.Now.Millisecond).ToString().Substring(0, 8));58 }59 }