gpt4 book ai didi

c# - 在 C# WinForms 中,我如何分配一个 labeltext 几秒钟然后再次删除它,而不中断其他代码的执行?

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:09 26 4
gpt4 key购买 nike

我正在创建一个 todolist 程序,您可以在其中添加任务,完成后选中一个复选框,单击更新,任务将从列表中删除(已完成)。

我创建了一个游戏化版本,您在其中完成的每项任务都会获得 XP 点数。我只是根据任务字符串的长度来计算 XP。然后,总 XP 显示在 WinForm 中的标签文本上。

然后我想到我想要显示总 XP 的标签,显示从任务中获得的 XP,只需几秒钟,然后再次显示总 XP。

如果不让整个代码也等待几秒钟,我只是不知道该怎么做。我想它需要在一个单独的线程中运行,我对此没有经验。

1) XPlabel shows: 1455 XP
2) User completes task
3) XPlabel shows for 2 seconds: +254 XP
4) XPlabel shows: 1709 XP

其余代码不会等待那 2 秒,而是继续运行,执行其他任务。就像更新数据存储文本文件一样。

但是,如我所提到的,这样做会带来延迟体验,因为从我存储任务的数据文本文件中写入/删除的其他代码也必须等待几秒钟。整个用户界面将暂停那几秒钟。

所以...

有没有办法在代码保持运行的同时执行此操作?

代码摘录:

//removes checked items
foreach (string item in todolistCheckbox.CheckedItems)
{
string strFilePath = "tododo.data";
string strSearchText = item;
string strOldText;
string n = "";
StreamReader sr = File.OpenText(strFilePath);
while ((strOldText = sr.ReadLine()) != null)
{
if (!strOldText.Equals(strSearchText))
{
n += strOldText + Environment.NewLine;
}
//XP Calculation
xpread();
I WANT --> xplabel.text = xp; --- 2 seconds
int x;
Int32.TryParse(xp, out x);
int buffxp = strOldText.Length * 8 + x;
string xpupd = buffxp.ToString();
//write
xpwrite(xpupd);
xpupdate(xpupd);
levelup(xpupd);
}
sr.Close();
File.WriteAllText(strFilePath, n);

}

/干杯

最佳答案

为此,您可以使用 Task:

xplabel.Text = "+254";

// 2 second pause
Task.Delay(2000)
// after 2 second continue execution
.ContinueWith(t => { xplabel.Text = "1709"; },
CancellationToken.None,
TaskContinuationOptions.None,
// execution will be in GUI context, i.e. safe
TaskScheduler.FromCurrentSynchronizationContext());

不要忘记

using System.Threading;
using System.Threading.Tasks;

关于c# - 在 C# WinForms 中,我如何分配一个 labeltext 几秒钟然后再次删除它,而不中断其他代码的执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38212172/

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