[英]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.