C# 通过按住线程模拟键入

C# 通过按住线程模拟键入,c#,performance,C#,Performance,我正在编写一个bot,其中包含一个组件,通过通知用户“bot正在键入…”来模拟键入。为此,必须每10秒通知托管bot的服务提供商bot仍在工作 机器人“键入”的秒数仅由字符串长度除以“字符/秒”的任意值决定 var text=“这是我的回答!”; var-alertServiceInSeconds=10; 变量延迟=文本长度/(双)字符秒; 因此,必须执行两个任务:在延迟期间休眠线程,同时每隔调用一个方法alertServiceInSeconds 我尝试了几种方法,但bot似乎在delay+a

我正在编写一个bot,其中包含一个组件,通过通知用户“bot正在键入…”来模拟键入。为此,必须每10秒通知托管bot的服务提供商bot仍在工作

机器人“键入”的秒数仅由字符串长度除以“字符/秒”的任意值决定

var text=“这是我的回答!”;
var-alertServiceInSeconds=10;
变量延迟=文本长度/(双)字符秒;
因此,必须执行两个任务:在
延迟期间休眠线程,同时每隔
调用一个方法alertServiceInSeconds

我尝试了几种方法,但bot似乎在
delay+alertServiceInSeconds
秒内响应,而不仅仅是
delay
秒。我在这所小学的数学课上肯定遗漏了什么

而秒表已经过去了 发件人:

我觉得这种方法应该会伤害我的灵魂,因为调用
Math.Abs
的次数太多了。此外,调用TriggerTyping的频率比调用
alertServiceInSeconds
的频率更高

var stopwatch=new stopwatch();
秒表。开始();
while(秒表时间
线,睡觉 这似乎完成了工作,但不像前面提到的那样准确

for(变量i=0;i
问题:

  • 这是如何导致bot在
    delay+alertServiceInSeconds
    秒内“键入”的
  • 这些方法的策略可以吗?睡眠循环和依赖于时间跨度的while循环似乎都有缺陷,但我想不出更好的方法

  • 您需要的不是alertServiceInSeconds%1,而是alertServiceInSeconds%10


    您还可以从任务调度库和队列中获益。

    似乎您真的需要一个计时器,您的%1将始终为0,因此不确定这是什么about@KeithNicholas我最终使用了你的建议,并阅读了所有相关内容。我不确定我是如何没有偶然发现计时器的,但唉,我在这里。如果可以的话,我会用你的评论来回答这个问题。