簡體   English   中英

異步循環C#/ WPF

[英]Async loop C#/WPF

我試圖在按下鍵盤時進行異步循環,以便在按下按鈕時移動圖像。

    private async void Window_KeyDown(object sender, KeyEventArgs e)
    {
        await Task.Run(() =>
        {
            while (e.IsDown)
            {
                if (e.Key.ToString() == "D")
                    Width.Text = (int.Parse(Width.Text) - 10).ToString();
            }

        });
    }

但是它導致了一個錯誤:InvalidOperationException,並且未加載mscorlib.pdb。

在表單中添加一個布爾值(bool isDDown = false)

在keydown事件集上isDDown = true; 在keyup事件集上isDDown = false;

在表單中添加一個計時器,然后檢查您是否經常需要,如果為true,則進行更新。

它不會像這一樣連續,但是應該擺脫您的錯誤

相當簡單的方法,也可能過於復雜。 用while循環生成一個線程,該線程會連續地將您要連續執行的任務添加到GUI線程的調度中。 只要您按住鼠標按鈕,它就會執行此操作,放開時,它會停止添加要執行的作業,並且排隊的所有作業都將由於檢查而失敗,然后才實際執行任何作業

bool isGoing = false;

private void MouseMouseDown(object sender, MouseButtonEventArgs e)
{
    isGoing = true;
    new Thread(new ThreadStart(() => { while (isGoing) { Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { if (isGoing)
    {
        //Whatever you want to happen continuously ie. move your image
    }}));}})).Start();
}

private void MouseUp(object sender, MouseButtonEventArgs e)
{
    isGoing = false;
}

這將消除您的錯誤,並且是連續的。

注意:

我是通過鼠標按鍵完成此操作的,但與按鍵操作完全相同

圖像移動的速度取決於計算機的性能,我建議您使用計時器,或者更好的是在移動圖像時使用增量時間計算。 這樣,您可以每秒移動圖像X次,但要保持位置更新所有可能的機會,從而實現最平滑,最一致的運動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM