【发布时间】:2026-01-10 06:50:02
【问题描述】:
我正在处理一个 C# 项目,想在一个过程中稍作停顿大约 2 秒。
其实我已经尝试过使用Invoke,但是如你所知,我们不能在类这种过程中使用它。
这是我的代码以获取更多详细信息:
public class GenerateFile
{
public CSPFEnumration.ProcedureResult GenerateFaxFile(string Daftar_No, string Channelno, string NationalCode)
{
string script = string.Format(" DECLARE @RC INT " +
" DECLARE @Daftar_No INT = '{0}' " +
" DECLARE @hokm_type_code INT = 100 " +
" DECLARE @Channelno INT = '{1}' " +
" DECLARE @Id_No BIGINT = '{2}' " +
" EXEC @rc = [dbo].[Hokm_with_type] @Daftar_No, @hokm_type_code, @Channelno, @Id_No ",
Daftar_No,
Channelno,
NationalCode);
try
{
IEnumerable<string> commandStrings = Regex.Split(script, @"^\s*GO\s*$",
RegexOptions.Multiline | RegexOptions.IgnoreCase);
Connect();
foreach (string commandString in commandStrings)
{
if (commandString.Trim() != "")
{
using (var command = new SqlCommand(commandString, Connection))
{
command.ExecuteNonQuery();
}
}
}
DisConnect();
string FaxFilePath = InternalConstant.FaxFilePath + "\\" + string.Format("Lhokm{0}.tif", Channelno);
// I want to make a pause in here without locking UI
if (File.Exists(FaxFilePath))
return CSPFEnumration.ProcedureResult.Success;
else
return CSPFEnumration.ProcedureResult.Error;
}
catch (Exception ex)
{
InternalDatabase.GetInstance.InsertToPensionOrganizationException(ex);
return CSPFEnumration.ProcedureResult.Error;
}
}
}
我也尝试过等待,但我无法返回正确的值。因为在这个过程中如果我使用await,值会在等待完成之前返回。
编辑:
而且我也不想使用Thread.Sleep,因为它会锁定 UI。
感谢您的帮助。
【问题讨论】:
-
为什么不用线程和
Thread.Sleep? -
显然我可以告诉你一个解决方案。但另一方面,我很感兴趣你为什么要这样做?因为只是“闲逛”对我不利。
-
为什么不拆分业务逻辑呢?创建一个方法 IsFileExist() 来检查文件是否存在,这样你就不必锁定 UI,一旦你得到确认,就调用过程。
-
另一种方法是创建一个事件,在生成文件时触发,该事件可以调用您的操作。这样你就不需要做任何检查了。
-
祝你好运哥们,我再次建议采取“基于事件的方法”,如果你开始等待2秒,下周会因为性能问题而等待5秒,并且会越来越长...您最终将失去对过程的控制。使用基于事件的方法,您可以优化逻辑,使其更好、更高效,而无需更改核心逻辑中的任何内容。再次祝你好运。