我有以下C#代碼:
while (wechsel)
{
ProfDpDrv.MDPReadSlaveData(SlaveAddress, resetdiag, out dpData)。
newStatus = dpData.m_InputData[i];
if (newStatus == 1)
{
int debug = e.RowIndex;
Dgv_Data_List.Rows[e.RowIndex].Cells["Adresse"].Style.BackColor=Color.Green; //
Dgv_Data_List.Refresh()。
wechsel = false;
}
在這里,如果wechsel仍然為真,我想用ESC退出這個回圈。順便說一下,我沒有控制臺。
uj5u.com熱心網友回復:
由于我們不知道這段代碼在哪里運行(WinForms, WPF, ASP, 等等),除了它不是一個控制臺,很難給你一個具體的幫助。
解決這個問題的一般建議是創建一個CancellationTokenSource并將source.Token交給長期運行的方法。這個方法可以在回圈中定期檢查,通過檢查token.IsCancellationRequested來檢查是否有取消的請求,然后簡單地做任何需要的事情來留下一個一致的狀態并退出這個方法。
而回到我答案的開頭,這取決于你所使用的介面,你必須hook到一些東西來注冊一個按鍵,然后呼叫source.Cancel()。
uj5u.com熱心網友回復:
我假設你使用的是WPF或WinForms.
。只要訂閱主機視窗上的KetDown方法來捕獲所有被按下的鍵,然后檢查是否是ESC并適當地處理,見下面的代碼:
public partial class MainWindow : Windowprivate bool wechsel = true;
public MainWindow()
{
InitializeComponent()。
this.KeyDown = MainWindow_KeyDown。
}
private void MainWindow_KeyDown(object sender, KeyEventArgs e)。
{
if (e.Key != Key.Escape) return;
wechsel = false;
txtInfo.Text = "被ESC打斷"。
}
private async void Button_Click(object sender, RoutedEventArgs e)。
{
int i = 0;
while (wechsel)
{
txtInfo.Text = i .ToString()。
await Task.Delay(500) 。
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/327364.html
標籤:
