猿问

WPF中的多线程以及类似MessageBox的代码阻断方式(欢迎大牛们前来指导)

红色为主要问题   先看代码片断 void Moveing() {             //开启一个新的线程运行动画数据            System.Threading.Thread thread = new System.Threading.Thread(                    new System.Threading.ThreadStart(UpDateImage));                            //如果此处加入  thread.Join() 将导致在子线程中无法更新UI导致死锁                //此处若加入MessageBox时并不影响thread更新UI,但同时可阻断代码继续运行               //如何可以实现像MessageBox这种阻止代码运行的方案?      //MessageBox.Show("Test");                //此处需要等待 A1 处执行完毕才执行,如何实现?              this.Content = "Done"; } void UpDateImage() { int count =10;//更新次数 //使用一个时间控件每个时间更新UI  System.Timers.Timer timer = new System.Timers.Timer();                        timer.Interval = 100;                         timer.Elapsed += delegate                        {                           //此处更新UI需使用主线程                           this.Dispatcher.Invoke(new Action(                                   delegate()                                   {               //mainImage是一个Image控件                                       this.mainImage.Source = //将Image的背景更新                                    }                                   )                                   , null);             count--;             if(count <=0)             {               //A1               timer.Stop();             }          } }
慕村9548890
浏览 755回答 4
4回答

摇曳的蔷薇

阻塞主线程的确不是好办法。像一楼说的那样设计也不错啊。。我这边提供一种你想要的效果实现,使用: Application.DoEvents(); int count = 10;//更新次数 public Form1() { InitializeComponent(); } void UpDateImage() { //使用一个时间控件每个时间更新UI System.Timers.Timer timer = new System.Timers.Timer(); timer.Interval = 100; timer.Elapsed += delegate { //此处更新UI需使用主线程 this.BeginInvoke(new Action( delegate() { Thread.SpinWait(1000); //mainImage是一个Image控件 this.label1.Text = count.ToString(); } ) , null); System.Threading.Interlocked.Decrement(ref count); if (count

PIPIONE

为什么不直接把: //此处需要等待 A1 处执行完毕才执行,如何实现? this.Content = "Done"; 放到A1的位置上呢?

梦里花落0921

可以使用 BackgroundWorker 线程组件。。里面有个属性判断是否执行完毕、、 或者可以用线程池
随时随地看视频慕课网APP
我要回答