public enum ThreadStatus
{
SuccessRunning,
FailedToInvoke,
FailedToAbort,
Closed
}
public class ThreadQuery
{
public ThreadQuery(int Interval)
{
m_interval = Interval;
}
private int m_interval;
private System.Threading.Thread m_thread;
public event Action Event;
public void Start()
{
m_thread = new System.Threading.Thread(new System.Threading.ThreadStart(Run));
m_thread.Start();
CurrentStatus = ThreadStatus.SuccessRunning;
}
public ThreadStatus CurrentStatus = ThreadStatus.Closed;
private bool Closed = false;
private void Run()
{
while (!Closed)
{
if (DateTime.Now >= DateTime.Now.AddMilliseconds(m_interval))
{
try
{
Event.Invoke();
CurrentStatus = ThreadStatus.SuccessRunning;
}
catch { CurrentStatus = ThreadStatus.FailedToInvoke; }
}
Thread.Sleep(1);
}
CurrentStatus = ThreadStatus.Closed;
}
public void Abort()
{
try
{
m_thread.Join();
m_thread.Abort();
CurrentStatus = ThreadStatus.Closed;
}
catch
{
CurrentStatus = ThreadStatus.FailedToAbort;
}
Closed = true;
}
}