DotNet 4.8.1 build of DotNetBar
This commit is contained in:
142
PROMS/DotNetBar Source Code/PopupDelayedClose.cs
Normal file
142
PROMS/DotNetBar Source Code/PopupDelayedClose.cs
Normal file
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections;
|
||||
|
||||
|
||||
namespace DevComponents.DotNetBar
|
||||
{
|
||||
internal class PopupDelayedClose
|
||||
{
|
||||
#region Private Variables
|
||||
private Timer m_Timer = null;
|
||||
private ArrayList m_Popups = new ArrayList();
|
||||
private System.Threading.ReaderWriterLock m_PopupsLock = new System.Threading.ReaderWriterLock();
|
||||
#endregion
|
||||
|
||||
public PopupDelayedClose()
|
||||
{
|
||||
m_Timer = new Timer();
|
||||
m_Timer.Enabled = false;
|
||||
m_Timer.Interval = 800;
|
||||
m_Timer.Tick += new EventHandler(TimerDelayedClose);
|
||||
}
|
||||
|
||||
void TimerDelayedClose(object sender, EventArgs e)
|
||||
{
|
||||
m_Timer.Stop();
|
||||
CloseAllPopups();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (m_Timer != null)
|
||||
{
|
||||
m_Timer.Stop();
|
||||
CloseAllPopups();
|
||||
|
||||
m_Timer.Dispose();
|
||||
m_Timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void CloseAllPopups()
|
||||
{
|
||||
if (m_Popups.Count > 0)
|
||||
{
|
||||
bool readerLockHeld = m_PopupsLock.IsReaderLockHeld;
|
||||
System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
|
||||
if (readerLockHeld)
|
||||
{
|
||||
cookie1 = m_PopupsLock.UpgradeToWriterLock(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PopupsLock.AcquireWriterLock(-1);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
foreach (PopupItem item in m_Popups)
|
||||
item.ClosePopup();
|
||||
m_Popups.Clear();
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (readerLockHeld)
|
||||
{
|
||||
m_PopupsLock.DowngradeFromWriterLock(ref cookie1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PopupsLock.ReleaseWriterLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void DelayClose(PopupItem item)
|
||||
{
|
||||
if (m_Timer == null)
|
||||
return;
|
||||
|
||||
bool readerLockHeld = m_PopupsLock.IsReaderLockHeld;
|
||||
System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
|
||||
if (readerLockHeld)
|
||||
{
|
||||
cookie1 = m_PopupsLock.UpgradeToWriterLock(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PopupsLock.AcquireWriterLock(-1);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
m_Popups.Add(item);
|
||||
m_Timer.Start();
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (readerLockHeld)
|
||||
{
|
||||
m_PopupsLock.DowngradeFromWriterLock(ref cookie1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PopupsLock.ReleaseWriterLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void EraseDelayClose()
|
||||
{
|
||||
bool readerLockHeld = m_PopupsLock.IsReaderLockHeld;
|
||||
System.Threading.LockCookie cookie1 = new System.Threading.LockCookie();
|
||||
if (readerLockHeld)
|
||||
{
|
||||
cookie1 = m_PopupsLock.UpgradeToWriterLock(-1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PopupsLock.AcquireWriterLock(-1);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
m_Popups.Clear();
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (readerLockHeld)
|
||||
{
|
||||
m_PopupsLock.DowngradeFromWriterLock(ref cookie1);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_PopupsLock.ReleaseWriterLock();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user