如何使用previewMouseUp打破无限循环?

时间:2014-04-10 09:53:37

标签: c# wpf

目前,我开始循环PreviewMouseDown,我正在考虑使用PreviewMouseUp打破循环,但显然失败了。以下是我的方式。

public bool stopFlag = true;
public int abc = 0;
private void TestingDown(){
    while(stopFlag)
    {
       abc++;
    }
}

private void TestingUp()
{
    stopFlag = false;
    Message.show(abc);
}

实际上我的想法是创建一种按钮保持效果,比如智能手机,按住按钮3秒钟并做一些事情。但是按钮没有任何onHold事件?

3 个答案:

答案 0 :(得分:2)

启动Timer中的PreviewMouseDown并检查PreviewMouseUp中的已用时间。

答案 1 :(得分:0)

在这种情况下,您的循环在与整个UI相同的线程中运行。但实际上你需要的是计算MouseDown和MouseUp事件之间的时间。

    DateTime holdStartTime;

    public MainWindow()
    {
        InitializeComponent();


        PreviewMouseDown += new MouseButtonEventHandler(MainWindow_PreviewMouseDown);
        PreviewMouseUp += new MouseButtonEventHandler(MainWindow_PreviewMouseUp);
    }

    void MainWindow_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        holdStartTime = DateTime.Now;
    }

    void MainWindow_PreviewMouseUp(object sender, MouseButtonEventArgs e)
    {
        if ((DateTime.Now - holdStartTime).TotalMilliseconds < 1000)
        {
            Console.WriteLine("Do something");
        }
        else
        {
            Console.WriteLine("Do something else");
        } 
    }

答案 2 :(得分:0)

我认为你需要背景线程,因为UI线程在这个循环中很忙。 您可以参考以下链接获取更多信息。 [背景工作者]