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();
}));
}
}
}
}
}