DotNet 4.8.1 build of DotNetBar
This commit is contained in:
134
PROMS/DotNetBar Source Code/Ribbon/ThreadUIOperation.cs
Normal file
134
PROMS/DotNetBar Source Code/Ribbon/ThreadUIOperation.cs
Normal file
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
|
||||
namespace DevComponents.DotNetBar
|
||||
{
|
||||
internal class ThreadUIOperation
|
||||
{
|
||||
#region Private Variables
|
||||
private bool m_IsActive = false;
|
||||
private System.Threading.ReaderWriterLock m_FadeImageLock = new System.Threading.ReaderWriterLock();
|
||||
private EventHandler m_UpdateUIHandler = null;
|
||||
private EventHandler m_RecordStartStateHandler = null;
|
||||
private EventHandler m_CleanupHandler = null;
|
||||
#endregion
|
||||
|
||||
#region Internal Implementation
|
||||
public ThreadUIOperation(EventHandler recordStartState, EventHandler updateUIHandler, EventHandler cleanup)
|
||||
{
|
||||
m_RecordStartStateHandler = recordStartState;
|
||||
m_UpdateUIHandler = updateUIHandler;
|
||||
m_CleanupHandler = cleanup;
|
||||
}
|
||||
|
||||
public bool IsActive
|
||||
{
|
||||
get { return m_IsActive; }
|
||||
}
|
||||
|
||||
public void Start()
|
||||
{
|
||||
m_FadeImageLock.AcquireReaderLock(-1);
|
||||
try
|
||||
{
|
||||
if (m_IsActive)
|
||||
return;
|
||||
}
|
||||
finally
|
||||
{
|
||||
m_FadeImageLock.ReleaseReaderLock();
|
||||
}
|
||||
|
||||
bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
|
||||
System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
|
||||
if (readerLockHeld)
|
||||
{
|
||||
cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_FadeImageLock.AcquireWriterLock(-1);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
m_IsActive = true;
|
||||
m_RecordStartStateHandler.Invoke(this, new EventArgs());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (readerLockHeld)
|
||||
{
|
||||
m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_FadeImageLock.ReleaseWriterLock();
|
||||
}
|
||||
}
|
||||
|
||||
FadeAnimator.Fade(this, new EventHandler(this.OnFadeChanged));
|
||||
m_IsActive = true;
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
m_FadeImageLock.AcquireReaderLock(-1);
|
||||
try
|
||||
{
|
||||
if (!m_IsActive)
|
||||
return;
|
||||
}
|
||||
finally
|
||||
{
|
||||
m_FadeImageLock.ReleaseReaderLock();
|
||||
}
|
||||
FadeAnimator.StopFade(this, new EventHandler(OnFadeChanged));
|
||||
|
||||
bool readerLockHeld = m_FadeImageLock.IsReaderLockHeld;
|
||||
System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
|
||||
|
||||
if (readerLockHeld)
|
||||
{
|
||||
cookie1 = m_FadeImageLock.UpgradeToWriterLock(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_FadeImageLock.AcquireWriterLock(-1);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
m_IsActive = false;
|
||||
m_CleanupHandler.Invoke(this, new EventArgs());
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (readerLockHeld)
|
||||
{
|
||||
m_FadeImageLock.DowngradeFromWriterLock(ref cookie1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_FadeImageLock.ReleaseWriterLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void OnFadeChanged(object sender, EventArgs e)
|
||||
{
|
||||
m_UpdateUIHandler.Invoke(this, new EventArgs());
|
||||
}
|
||||
|
||||
public void StartReadOperation()
|
||||
{
|
||||
m_FadeImageLock.AcquireReaderLock(-1);
|
||||
}
|
||||
|
||||
public void EndReadOperation()
|
||||
{
|
||||
m_FadeImageLock.ReleaseReaderLock();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user