Это работает в окнах 8, и я предполагаю, что это сработает и для вас. Если у вас есть процесс постоянно работает в фоновом режиме, с помощью задачи, вы можете сделать это:
Определить то, что работает в фоновом режиме:
Определить задачи и логическое значение, чтобы перевернуть, когда вы хотите сделать паузу
Task doStuff;
static bool pauseTask = false;
Определить задачи, где это необходимо:
doStuff = new Task(LoopForMe);
doStuff.Start();
функцию, которая просто делает что-то
private async static void LoopForMe()
{
//Keep thread busy forever for the sake of the example
int counter = 0;
while (true)
{
//Define pauseTask as a static bool. You will flip this
//when you want to pause the task
if (pauseTask)
{
await Task.Delay(100000);
pauseTask = false;
}
Debug.WriteLine("working... " + counter);
counter++;
//Do something forever
}
}
А в вашем случае, вы можете перевернуть BOOL:
pauseTask = true;
Я должен отметить несколько недостатков в этом, однако. Я бы нашел способ определить, когда задача, которая должна «приостановить» фоновый код запуска, сможет разблокировать фоновый поток. Этот пример просто заставил поток ждать чего-то определенного времени. Я бы перевернул bool взад и вперед на основе кода, который должен «блокировать» его. Другими словами, блокируйте и разблокируйте поток по мере необходимости, а не полагайтесь на таймер. Этот подход должен держать вас UI еще работающим во время работы в Task (поток a.k.a.) от выполнения какой-либо работы в течение заданного промежутка времени.
Здесь много подводных камней. Как заставить поток ждать без таймера? Теперь вы попадаете в более сложную логику ожидания потока. Преимущество вышеприведенного кода заключается в том, что он находится в цикле. Как вы это делаете, если это не так? К сожалению, вы задали свой вопрос довольно неопределенно, поэтому я действительно не знаю, что именно вы пытаетесь «приостановить». Пожалуйста, используйте приведенный выше код в качестве отправной точки.
Использование фоновой нити или что-то еще. Кажется, вы ничего не делаете там, кроме паузы ... поэтому, почему вы хотите приостановить работу без блокировки ui? Что ты пытаешься сделать ? – Noctis
Я не совсем уверен, что вы подразумеваете под «Приостановить приложение без блокировки интерфейса». Что именно вам нужно «приостановить»? Это игра, в которой пользовательский интерфейс должен работать, в то время как сама игра приостановлена? Или вы хотите приостановить выполнение чего-то, что происходит в фоновом режиме? –
Я ищу, чтобы приостановить выполнение чего-то. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что иногда (на самом деле довольно много раз), когда нажата кнопка, и у меня есть пауза, а затем продолжайте что-то еще (например, навигация по страницам), вибрация не останавливается и продолжается бесконечно, пока Я вынужден закрыть приложение, чтобы остановить его. Я даже не знаю, почему. – Matthew