Delayed function calls

后端 未结 12 1310
星月不相逢
星月不相逢 2020-11-30 22:07

Is there a nice simple method of delaying a function call whilst letting the thread continue executing?

e.g.

public void foo()
{
    // Do stuff!

           


        
12条回答
  •  再見小時候
    2020-11-30 22:39

    public static class DelayedDelegate
    {
    
        static Timer runDelegates;
        static Dictionary delayedDelegates = new Dictionary();
    
        static DelayedDelegate()
        {
    
            runDelegates = new Timer();
            runDelegates.Interval = 250;
            runDelegates.Tick += RunDelegates;
            runDelegates.Enabled = true;
    
        }
    
        public static void Add(MethodInvoker method, int delay)
        {
    
            delayedDelegates.Add(method, DateTime.Now + TimeSpan.FromSeconds(delay));
    
        }
    
        static void RunDelegates(object sender, EventArgs e)
        {
    
            List removeDelegates = new List();
    
            foreach (MethodInvoker method in delayedDelegates.Keys)
            {
    
                if (DateTime.Now >= delayedDelegates[method])
                {
                    method();
                    removeDelegates.Add(method);
                }
    
            }
    
            foreach (MethodInvoker method in removeDelegates)
            {
    
                delayedDelegates.Remove(method);
    
            }
    
    
        }
    
    }
    

    Usage:

    DelayedDelegate.Add(MyMethod,5);
    
    void MyMethod()
    {
         MessageBox.Show("5 Seconds Later!");
    }
    

提交回复
热议问题