Подтвердить что ты не робот

Как запустить фоновое задание приложения Windows сразу после его регистрации?

Я пишу приложение Metro, которое будет работать только на ПК (так что нет или, по крайней мере, меньше, беспокоиться об автономном режиме). Мне нужно, чтобы он регистрировал и запускал фоновое задание, когда пользователь нажимает кнопку. Он регистрируется в порядке, но я не нашел способа заставить его работать раньше, чем при 15-минутной задержке, что бесполезно для этого приложения. Любые идеи, как я могу заставить его работать сразу?

Также я нашел аналогичный вопрос здесь, который говорит, что это невозможно, но кто-то должен был понять способ.

Edit:

Мое рассуждение о необходимости выполнения этой задачи таково:

Мое приложение будет читать и писать файлы по мере их появления в течение длительного периода времени, от нескольких минут до нескольких часов. В большинстве случаев на этот раз маловероятно, что приложение будет представлено на переднем плане. Поскольку мне нужен код для продолжения выполнения, лучше всего было создать фоновое задание, но я не могу найти способ инициировать эту задачу за пределами Visual Studio, хотя в Visual Studio он работает отлично. Если есть более подходящий способ справиться с этим исполнением, я готов его использовать.

4b9b3361

Ответ 1

ИЗМЕНИТЬ

Пересмотр из-за дополнительной информации от OP.

Единственный способ, которым я могу думать, что вы могли бы сделать это через приложение метро, ​​- попросить вашего пользователя "привязать" ваше приложение к рабочему столу - в вашем отключенном приложении они могут поразить начало/остановку и переносить только с помощью рабочего стола на одновременно с обоими приложениями, запущенными на переднем плане.


Я думаю, что мой другой ответ не завершен, поэтому я постараюсь предложить лучший ответ.

Чтобы уточнить: вы заявляете, что вся ваша причина для использования фоновой задачи заключается в том, что ваше приложение будет продолжать использовать некоторый код, даже если ваше приложение приостановлено.

Фоновые задачи:

Вы не можете запустить фоновое задание WinRT для немедленного запуска.

Имейте в виду, что фоновая задача по умолчанию имеет 1 секунду CPU каждые 2 часа, и нет способа указать, когда она будет активирована - вы можете использовать оппортунистический запуск - в этом случае вам нехорошо.

Кроме того, даже если ваше приложение сделало приложение блокировки экрана, вы не можете указать немедленную обработку фоновой задачи, если вы не используете push-уведомления, которые не подходят для того, что вы пытаетесь сделать. Для приложения с блокировкой экрана вы обычно получаете 2 секунды процессора каждые 15 минут.

OnSuspending:

Однако, если ваше приложение приостановлено, у вас все еще есть несколько секунд (5, в соответствии с этим: http://www.redlist.ch/post/Time-limit-on-suspending-a-WinRT-app.aspx) времени, чтобы убрать до вашего приложения приостанавливается ОС. Это время отсрочки - дольше времени, чем у вас в фоновой задаче!

Поэтому я бы предложил не использовать фоновые задачи, а вместо этого инициировать фоновый поток (согласно моему другому ответу), чтобы выполнить действие нажатия кнопки (используя локальное состояние для записи его прогресса). Теперь, если вы также подключаетесь к событию App onspending, вы можете использовать это, чтобы узнать, не было ли что-то не выполнено из действия нажатия кнопки и завершено.

Надеюсь, что это имеет смысл. Удачи!

Ответ 2

То, как я это обошлось, это создать общую функцию, которая может быть вызвана как из приложения, так и из фоновой задачи.

В вашем случае, когда пользователь нажимает кнопку регистрации, вы можете зарегистрировать задачу, а затем вызвать общую функцию (из своего приложения). Когда задача запускается, она также может вызывать одну и ту же общую функцию.

Ответ 3

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

new TaskFactory().StartNew(() => YourBackgroundTaskMethod())

Вы не будете блокировать пользовательский интерфейс, и вы можете легко вывести результаты обратно из фонового потока в пользовательский интерфейс, если вам нужно.

Таким образом, вам не нужно полагаться на то, что ваше приложение будет рекламироваться в приложении блокировки экрана, что является требованием, если вы хотите запускать задачи таймера фона.

Ответ 4

Кажется, что ваш прецедент лучше всего выиграет от системы уведомлений. Вы можете отправлять уведомления в приложение при создании файлов (либо из службы создания файла, либо из приложения .Net 4.5 на рабочем столе, которое обменивается данными с вашим приложением через облачную службу).

Что касается фоновой работы в целом, вы МОЖЕТЕ запланировать уведомления о плитки каждую минуту с помощью Windows.UI.Notifications.ScheduledTileNotification.

Ответ 5

вы можете подписаться на событие raw push notification. когда вы хотите запустить процесс, вы можете попросить свой сервер отправить необработанное уведомление, которое активирует фоновые задачи.