Tag: 睡眠

如何等到File.Exists?

我有一个应用程序,在所选文件夹中侦听* .log文件。 我用过FileSystemWatcher 。 但有一个问题。 负责制作该文件的另一个应用程序采取以下步骤: 制作一个* .gz文件 将其解压缩到txt文件(一些随机文件名) 将* .txt名称更改为具有* .log扩展名的正确名称。 我无法改变这种行为。 所以我为* .gz和* .txt文件制作了2个FileSystemWatcher 。 为什么? 因为此应用程序有时不解压缩gz文件,有时不会将txt文件重命名为最终的* .log文件。 FileSystemWatcher2捕获txt文件,然后(在大多数情况下,它被重命名为在接下来的1000ms内登录)我需要等待一段时间来检查txt文件是否存在(如果没有,它似乎被重命名为最终的* .log文件) 。 问题是,如何在没有Thread.Sleep()情况下检查文件是否存在以防止UI冻结? 我希望很清楚,如果不是,我会尝试更好地描述它。 我认为这是一个复杂的问题。 一些代码示例: Watz for gz文件: private void fileSystemWatcher_Created(object sender, FileSystemEventArgs e) { //this is for gz files in case if gz file is not unpacked automatically by other app //I […]

C#睡眠500毫秒

你能否告诉我如何暂停我的程序500毫秒然后继续? 我读Thread.Sleep(500)并不好,因为它阻止了GUI线程。 使用计时器它会触发回调…… 我只想等待500毫秒然后继续下一个声明。 请指教。 编辑:我需要显示状态栏消息500毫秒,然后用另一个消息更新消息。 对不起,我的意思是500不是50。 编辑:我明白你所说的一切。 但是:[我只想等待500ms,然后继续下一个声明。]我认为因为它是如此短暂的间隔我将在主GUI线程上执行Thread.Sleep(500)。 否则我将不得不重写大量代码以适应500毫秒的这个短暂间隔。 编辑:我将尝试重新格式化我的状态消息,因此不需要暂停。

C#标签文本未更新

我有以下代码: private void button1_Click(object sender, EventArgs e) { var answer = MessageBox.Show( “Do you wish to submit checked items to the ACH bank? \r\n\r\nOnly the items that are checked and have the status ‘Entered’ will be submitted.”, “Submit”, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1); if (answer != DialogResult.Yes) return; button1.Enabled = false; progressBar1.Maximum = dataGridView1.Rows.Count; progressBar1.Minimum = 0; […]

C#Thread.Sleep(1000)在某些电脑上花费的时间超过1000毫秒

我写ac#program倒计时5秒。 我所做的是: new Task(() => { try { this.Invoke((Action)delegate() { label1.Text = “5”; // 4, 3, 2..etc }); } Thread.Sleep(1000); } catch { // form could be disposed break; } } }).Start(); 这可以在我的电脑上运行,但是,当我将程序复制到平板电脑时,Thread.Sleep(1000)给出的时间超过1秒。 换句话说,从5,4,3,2,1更新标签需要5秒以上(实际上超过10秒)。 或者,更新label1.Text =“5”等需要很长时间? 这对我没有意义。 我想知道出了什么问题?

我该怎么用Sleep或Timer

我有两个使用计时器或使用睡眠的替代方案,我需要在这个方法完成后每隔3秒调用一个方法,我写了一个基本的例子来certificate我的意思: public static void Main() { new Thread(new ThreadStart(fooUsingSleep)).Start(); callToMethodAfterInterval(new Action(fooUsingTimer), 3000); } public static void fooUsingSleep() { Console.WriteLine(“Doing some consuming time work using sleep”); Thread.Sleep(3000); fooUsingSleep(); } public static void fooUsingTimer(object dummy, ElapsedEventArgs dummyElapsed) { Console.WriteLine(“Doing some consuming time work usning timer”); callToMethodAfterInterval(new Action(fooUsingTimer), 3000); } public static void callToMethodAfterInterval(Action inMethod, int inInterval) { […]

使用异步在线程中睡眠而不冻结

所以我在这里贴了一个标签(“”)。 单击按钮(按钮1)时,标签文本变为“测试”。 2秒后,文本将重新设置为“”。 我使用计时器(间隔为2000)完成了这项工作: private void button1_Click(object sender, EventArgs e) { label1.Text = “Test”; timer.Enabled = true; } private void timer_Tick(object sender, EventArgs e) { label1.Text = “”; } 这有效; 但是,我很好奇它使它在异步方法中工作。 我的代码目前看起来像这样: private void button1_Click(object sender, EventArgs e) { label1.Text = “Test”; MyAsyncMethod(); } public async Task MyAsyncMethod() { await Task.Delay(2000); label1.Text = “”; } […]

为什么使用System.Threading.Thread.Sleep()是一种不好的做法?

我正在编写一个应用程序,通过一个复杂的API处理一个庞大而丑陋的第三方系统。 有时系统会发生一些错误,但如果我们等待我的程序面对这些错误,那就太晚了。 所以,我使用一个单独的线程来检查系统状态如下: while (true) { ask_state(); check_state(); System.Threading.Thread.Sleep(TimeSpan.FromSeconds(1)); } 如果我在100毫秒或每分钟检查一次系统状态并不重要。 但我听说使用Thread.Sleep()是一种不好的做法。 为什么? 在这种情况下我该怎么办?

有没有办法唤醒睡眠线程?

有没有办法在C#中唤醒一个睡眠线程? 那么,让它睡了很长时间并在你想要处理工作时将其唤醒?

如何使用计时器等待?

我试图通过使用计时器延迟我的方法中的事件,但我不一定了解如何使用计时器等待。 我将我的计时器设置为2秒,但是当我运行此代码时,最后一次调用运行没有2秒延迟。 Timer timer = new Timer(); timer.Tick += new EventHandler(timer_Tick); // Everytime timer ticks, timer_Tick will be called timer.Interval = (1000) * (2); // Timer will tick evert second timer.Enabled = true; // Enable the timer void timer_Tick(object sender, EventArgs e) { timer.Stop(); } private void button1_Click(object sender, EventArgs e) { label1.Text = “first”; […]

暂停执行方法而不锁定GUI。 C#

我正在使用C#进行卡片游戏,参与我的OOP介绍文章并让游戏正常运行,但我正在为GUI添加“天赋”。 目前,卡片即时处理并显示在UI上。 我希望在交易卡之前暂停程序暂停一会儿。 当游戏启动时,以下代码运行以填充代表它们的PictureBox(最终将是一个循环): cardImage1.Image = playDeck.deal().show(); cardImage2.Image = playDeck.deal().show(); cardImage3.Image = playDeck.deal().show(); cardImage4.Image = playDeck.deal().show(); cardImage5.Image = playDeck.deal().show(); … 我尝试使用System.Threading.Thread.Sleep(100); 在每个deal()。show()之间以及每个方法中,但它实现的只是锁定我的GUI,直到所有的睡眠处理完毕,然后一次显示所有的卡片。 我也试过使用计时器和while循环的组合,但它产生了相同的效果。 达到预期结果的最佳方法是什么?