Search code examples
c#wpftimermousedowndispatchertimer

combination of MouseDown and timer


I try to load a function like "holdFunction", during touching(MouseDown) and during at max 1 second .

So when user try to touch and hold for a second I have to call the function, and this isn't related to mouseUp.

Maybe I must to combine these:

private DateTime dtHold;
private void EditProduct_MouseDown(object sender, MouseButtonEventArgs e)
{
dtHold = DateTime.Now;
}
private void EditProduct_MouseUp(object sender, MouseButtonEventArgs e)
{
TimeSpan interval = TimeSpan.FromSeconds(1);
if (DateTime.Now.Subtract(dtHold) > interval)
{
//HoldFunction();
}
}

and

    System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
    private void EditProduct_MouseDown(object sender, MouseButtonEventArgs e)
    {
    dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
    dispatcherTimer.Interval = new TimeSpan(0, 0, 0,1,0);
    dispatcherTimer.Start();
    }

    private int _sec = 0;
    private void dispatcherTimer_Tick(object sender, EventArgs e)
    {
        _sec = _sec + 1;
        if (_sec == 2)
        {
            dispatcherTimer.Stop();
            {
                //HoldFunction();
            }
            _sec = 0;
            return;
        }
    }

Solution

  • Is this what you are looking for?

    If the User holds the MouseDown for 1 second, the evnt is fired?

    public partial class Window2 : Window
    {
        private DispatcherTimer _DispatcherTimer = new DispatcherTimer();
        public Window2()
        {
            InitializeComponent();
    
            MouseDown += _MouseDown;
            MouseUp += _MouseUp;
    
            _DispatcherTimer.Interval = TimeSpan.FromSeconds(1.0);
            _DispatcherTimer.Tick += _DispatcherTimer_Tick;
        }
    
        private void _DispatcherTimer_Tick(object sender, EventArgs e)
        {
            _DispatcherTimer.Stop();
            Title = DateTime.Now.ToString();
        }
    
        private void _MouseUp(object sender, MouseButtonEventArgs e)
        {
            _DispatcherTimer.Stop();
        }
    
        private void _MouseDown(object sender, MouseButtonEventArgs e)
        {
            _DispatcherTimer.Start();
        }
    }