Как оптимизировать while(true) или где применить событие waithandle для снижения загрузки процессора?

#c# #infinite-loop #waithandle

Вопрос:

Этот код использует много процессора с момента его бесконечного цикла, как я могу остановить его от цикла, когда он просто простаивает и активируется только при нажатии левой и правой кнопок мыши. Я читал о событии waithandle, но не знаю, куда его поместить в свой код. Пытался и потерпел неудачу.

 using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace test
{
    public static class Anti //does something
    {
        public static void Run()
        {
            var R1 = new Random(Guid.NewGuid().GetHashCode());

            while (true)
            {
                try
                {
                    if (Main.CEnabled)
                    {
                        if (InputHandler.IsKeyDown(Keys.LButton) amp;amp; InputHandler.IsKeyDown(Keys.RButton))
                        {
                            switch (Main.CurrentWeapon.Mode)
                            {
                                case FiringMode.Automatic:
                                    if (InputHandler.IsKeyDown(Keys.LButton) amp;amp; InputHandler.IsKeyDown(Keys.RButton))
                                    {

                                    }
                                    else if (InputHandler.IsKeyDown(Keys.LButton) amp;amp; InputHandler.IsKeyDown(Keys.RButton) amp;amp; InputHandler.IsKeyDown((Keys)162))
                                    {
                                        Console.WriteLine("Success");
                                    }
                                    break;
                                default:
                                    break;
                            }
                        }
                    }
                }
                catch { }
            }
        }
    }
}
 

Комментарии:

1. Что такое InputHandler ?

2. if(idle) { Thread.Sleep(0); continue; } в начале цикла может быть достаточно хорошо.

3. @Sinatr это иногда приводит к тому, что программа перестает отвечать на запросы.

4. Спящий режим обеспечит переключение на другие потоки и снижение нагрузки на процессор. Если что-то не отвечает, значит, это связано с чем-то другим.

5. Что вы на самом деле пытаетесь сделать? Похоже, вы проводите опрос на предмет изменений при вводе ключа, и это просто не очень хороший способ сделать это. Существуют ключевые события, которые вы должны иметь возможность использовать, которые информируют вас при нажатии кнопки.