gpt4 book ai didi

c# - 使用 c# 删除延迟时间 : System. Threading.Thread.Sleep(包含代码)

转载 作者:太空宇宙 更新时间:2023-11-03 20:29:33 25 4
gpt4 key购买 nike

我有一个 winform 应用程序,它会及时显示一些信息,每次加载数据时,我都会像这样设置 7 秒的延迟时间:System.Threading.Thread.Sleep(7000) 这样可以查看信息.我想要一个按钮,让我无需等待即可跳转到下一条信息。

我使用的逻辑是这样的:获取信息,如果有的话,等待7秒,下一个数据,等等。因此,如果我按下按钮,我想将该时间设置为 0。

有什么办法可以取消等待期吗?

代码如下:

ManualResetEvent wait_handle = new ManualResetEvent(true);

{...}

private void TheLoop(object stateinfo)
{
bool hasInfo = true;
bool hasLines = GetLinesOnProduction();
while (doLoop)
{
wait_handle.WaitOne();

if (hasLines)
{
param1 = Lines[CurrentLine].line;
param2 = Lines[CurrentLine].WO;

//Here I query the DB for the CurrentLine Data
ShowLineInformation(CurrentLine);
ShowChartByHour(param1, param2, out hasInfo);
if (hasInfo)
System.Threading.Thread.Sleep(7000);
//Here I move to the next line
if (CurrentLine < Lines.Count - 1)
CurrentLine++;
else
{

CurrentLine = 0; //Start all over again
hasLines = GetLinesOnProduction();
}
}
else
{
System.Threading.Thread.Sleep(40000); //(No Lines)Wait to query for lines again
hasLines = GetLinesOnProduction();
}
}
}

private void btnPauseResume_Click(object sender, EventArgs e)
{
if (btnPauseResume.Text == "Pause")
{
btnPauseResume.Text = "Resume";
wait_handle.Reset();
}
else
{
btnPauseResume.Text = "Pause";
wait_handle.Set();
}
}

最佳答案

您可以使用等待事件来代替执行 Thread.Sleep,只需将其设置为取消等待即可。像这样:

var waiter = new AutoResetEvent(false);
bool wasCanceled = waiter.WaitOne(7000);
if(wasCanceled)
// Jump to next...


// Cancel the wait from another thread
waiter.Set()

关于c# - 使用 c# 删除延迟时间 : System. Threading.Thread.Sleep(包含代码),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com