我正在开发一个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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我也试过等待,但我无法恢复正确的价值.因为在这个过程中如果我使用await,该值将在完成等待之前返回.
编辑:
而且我也不想使用,Thread.Sleep因为它会锁定UI.谢谢你的帮助.
使用async await功能:
将您的方法标记为异步.
添加Task.Delay(2000)作为等待任务.
public async CSPFEnumration.ProcedureResult GenerateFaxFile(string Daftar_No, string Channelno, string NationalCode)
{
-----
// I want to make a pause in here without locking UI
await Task.Delay(2000);
-----
}
Run Code Online (Sandbox Code Playgroud)
您可以环顾四周,Task.Delay()它不会阻塞当前线程并在几毫秒后继续执行。
msdn的用法示例:
Stopwatch sw = Stopwatch.StartNew();
var delay = Task.Delay(1000).ContinueWith(_ =>
{ sw.Stop();
return sw.ElapsedMilliseconds; } );
Console.WriteLine("Elapsed milliseconds: {0}", delay.Result);
// The example displays output like the following:
// Elapsed milliseconds: 1013
Run Code Online (Sandbox Code Playgroud)
或者也许看看Timer类。