2012-04-03 2 views
1

В настоящее время я работаю над мобильным приложением с VS2008, которое имеет возможность периодически проверять, находится ли требуемое устройство Bluetooth в диапазоне или нет. На данный момент я использую System.windows.form.Timer для этого. Тем не менее, я обнаружил, что это замедлит приложение, что еще хуже, он будет иногда сбой.Периодически проверяя, находится ли устройство Bluetooth в диапазоне или нет - .NET Compact Framework

Есть ли у кого-нибудь лучшее представление о том, как периодически выполнять проверку без использования System.windows.form.timer? В настоящее время я использую 32 фета для bluetooth.

Спасибо за любую помощь заранее.

С уважением,

Чарльз

+0

You» работа с System.Windows. Формы в C, а не C++ или C#? –

+0

Im работает с C# в winform –

ответ

0

Добавить фоновый поток, который спит на X количество времени (вы выбираете, как долго), то каждый раз в то время (на основе того, как долго нить спит) он будет работать (просыпайтесь и выполняйте), проверьте, находится ли Bluetooth в зоне действия и дайте вам какую-то форму обратной связи, после чего он снова заснет.

Подвела

  1. Thread активирует
  2. Проверяет Bluetooth находится в диапазоне
  3. дает вам питание назад
  4. Тема засыпает снова

    while (true) 
    { 
        //starts a new thread 
        Thread blueToothThread = new Thread(new ThreadStart(menu.Run)); 
    } 
    
    //the threads method named Run 
    public void Run() 
    { 
        // Perform the bluetooth check here 
    
        Console.WriteLine("You will see this only once every 8 seconds"); 
        //choose how long thread sleeps here 
        Thread.Sleep(8000); 
    } 
    
+0

Однако, как я могу использовать цикл WHILE для этого? Потому что проверка не ограничена по времени. Он может работать до тех пор, пока это возможно. Этот подход замедляет приложение, особенно пользовательский интерфейс? –

+0

Он будет работать до тех пор, пока это возможно, что ограничивает время, в течение которого поток спит, потому что вы продолжаете смотреть на то, что [threading] (http://msdn.microsoft.com/en-us/library/7a2f3ay4 (v = vs.80) .aspx) is, и если поток находится в бесконечном цикле 'while (true) с' Thread.Sleep (8000); 'это означает, что поток будет выполняться только один раз каждые 8 ​​секунд. –

+0

Хорошо. Я понимаю, что вы имели в виду. Вы говорите, что я должен использовать флаг, который устанавливает его в true или false. Если true, запустите проверку, иначе она прекратит проверку. Тем не менее, мне нужно использовать Thread, чтобы избежать замораживания. –

Смежные вопросы