initial oogynize check in _ this actually used to work!

This commit is contained in:
2016-02-14 21:16:31 -08:00
parent b183af5d55
commit 532ea133bc
337 changed files with 30692 additions and 0 deletions

View File

@@ -0,0 +1,131 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;
using System.Reflection;
// Ooganizer Namespaces
using Foo.Platform;
using System.Windows.Threading;
namespace Foo.ClientServices.ButtonWPForm
{
/// <summary>
/// This class is responsible for creation and deltion of ButtonFormMgr.cs on a
/// Dispatcher Thread. ~The Dispatcher is responsible for all the messages being passed
/// for the Form Objects, it must be running at all times and created before any forms get
/// created.
/// </summary>
[ComVisible(false)]
class DispatcherThread
{
// Member Variables
private static Thread s_DispatcherThread = null;
private static bool s_DispatcherThreadIsInitialized = false;
internal static ButtonFormMgr s_ButtonFormMgr = null;
// Declare the Log4net Variable
private static log4net.ILog Log = Logger.GetLog4NetInterface(MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Constructor by default will launch the thread if needed
/// </summary>
static DispatcherThread()
{
Log.Info(string.Format("{0}() - DispatcherThread() called", MethodBase.GetCurrentMethod().Name));
StartDispatcherThreadIfNeeded();
}
/// <summary>
/// Use this property to set the Dispatcher to running / not running
/// </summary>
public static bool Run
{
get { return s_DispatcherThreadIsInitialized; }
set
{
if (!value)
TerminateDispatcherThreadIfNeeded();
s_DispatcherThreadIsInitialized = value;
}
}
/// <summary>
/// Message Loop Thread for ButtonForm
/// </summary>
private static void DispatcherThreadProc()
{
// Create ButtonFormMgr Object on this thread *Allow global access to the object*
Log.Info(string.Format("{0}() - About to new ButtonFormMgr via DispatcherThread", MethodBase.GetCurrentMethod().Name));
s_ButtonFormMgr = new ButtonFormMgr(Dispatcher.CurrentDispatcher);
Log.Info(string.Format("{0}() - ButtonWPForm DispatcherThread is initialized s_DispatcherThreadIsInitialized is True", MethodBase.GetCurrentMethod().Name));
s_DispatcherThreadIsInitialized = true; // always set to true to allow caller to exit out
if (s_ButtonFormMgr != null)
{
Log.Info(string.Format("{0}() - ButtonFormMgr Launched via DispatcherThread", MethodBase.GetCurrentMethod().Name));
//Enter Dispatcher Message Loop
System.Windows.Threading.Dispatcher.Run();
}
else
{
Log.Error(string.Format("{0}() - ButtonFormMgr Launch Failed! Exiting Thread - Major Error must have occured", MethodBase.GetCurrentMethod().Name));
// exit thread - no need to stay here
}
}
/// <summary>
/// Use this function to start ThreadProc(above) if needed. COM+ can shutdown the thread anytime,
/// we need to make sure that the thread is alive BEFORE calling ButtonForms
/// </summary>
private static void StartDispatcherThreadIfNeeded()
{
if (s_DispatcherThread != null && s_DispatcherThread.IsAlive)
{
return;
}
else
{
s_DispatcherThreadIsInitialized = false;
// Start a new Thread so it can become the Message Loop
s_DispatcherThread = new Thread(new ThreadStart(DispatcherThread.DispatcherThreadProc));
// GUI components require the thread to be STA; otherwise throws an error
s_DispatcherThread.SetApartmentState(ApartmentState.STA);
Log.Info(string.Format("{0}() - Starting DispatcherThread...", MethodBase.GetCurrentMethod().Name));
s_DispatcherThread.Start();
Log.Info(string.Format("{0}() - DispatcherThread Started.", MethodBase.GetCurrentMethod().Name));
// Make sure the Application Object is running
// (COM will eventually just time out otherwise)
//while (!s_DispatcherThreadIsInitialized)
// System.Threading.Thread.Sleep(20); // Syncronous call
}
}
/// <summary>
/// Terminates all ButtonForm Objects and the Message Dispatcher Thread *do this only on shutdown*
/// </summary>
private static void TerminateDispatcherThreadIfNeeded()
{
if (s_DispatcherThreadIsInitialized)
{
// Delete ButtonFormMgr and all ButtonForms from this thread
s_ButtonFormMgr.TerminateDISP();
s_ButtonFormMgr = null;
s_DispatcherThread.Abort();
s_DispatcherThreadIsInitialized = false;
Log.Info(string.Format("{0}() - ButtonWPForm is DispatcherThread shutdown s_DispatcherThreadIsInitialized is False", MethodBase.GetCurrentMethod().Name));
}
}
}
}