viewing paste Unknown #12879 | C#

Posted on the
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Threading;
 
namespace Login_WPF.Animations.Loading
{
    /// <summary>
    /// Interaction logic for Test.xaml
    /// </summary>
    public partial class Test : Window
    {
        public Test()
        {
            InitializeComponent();
        }
        public class Window1Handler
        {
 
            private Thread StatusThread = null;
 
            private Window1 Popup = null;
 
            private AutoResetEvent PopupStarted = null;
 
            public void Start()
            {
                //create the thread with its ThreadStart method
                this.StatusThread = new Thread(() =>
                {
                    try
                    {
                        this.Popup = new Window1();
                        this.Popup.Show();
                        this.Popup.Closed += (lsender, le) =>
                        {
                            //when the window closes, close the thread invoking the shutdown of the dispatcher
                            this.Popup.Dispatcher.InvokeShutdown();
                            this.Popup = null;
                            this.StatusThread = null;
                            this.PopupStarted.Dispose();
                            this.PopupStarted = null;
                        };
                        //now we can let the main thread go ahead setting the AutoResetEvent
                        this.PopupStarted.Set();
                        //this call is needed so the thread remains open until the dispatcher is closed
                        System.Windows.Threading.Dispatcher.Run();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message + "\r\n" + ex.StackTrace);
                    }
                });
 
                //run the thread in STA mode to make it work correctly
                this.StatusThread.SetApartmentState(ApartmentState.STA);
                this.StatusThread.Priority = ThreadPriority.Normal;
                this.StatusThread.Start();
                //create a new AutoResetEvent initially set to false
                this.PopupStarted = new AutoResetEvent(false);
                //and wait until the second thread signals to proceed
                this.PopupStarted.WaitOne();
            }
 
            public void Stop()
            {
                if (this.Popup != null)
                {
                    //need to use the dispatcher to call the Close method, because the window is created in another thread, and this method is called by the main thread
                    this.Popup.Dispatcher.BeginInvoke(new Action(() =>
                    {
                        this.Popup.Close();
                    }));
                }
            }
        }
    }
}
Viewed 1140 times, submitted by Dynasty.