سؤال

أحاول تسجيل مهمة في الخلفية وأتلقى بعض السلوكيات الغريبة.يبدو أن المهمة نفسها هي التسجيل والتشغيل في الوقت المناسب؛ومع ذلك، عندما يتم تشغيله، فإنه يغلق برنامجي (بدون خطأ).

أظن أن السبب مرتبط بحقيقة أن البرنامج لا يطلب مني السماح بتشغيل مهمة في الخلفية عند التشغيل.لقد قمت بإنشاء إعلان لمهمة الخلفية كحدث نظام، وأنا أقوم بالتسجيل بهذه الطريقة من App.Xaml.cs:

var builder = new BackgroundTaskBuilder();

builder.Name = "NewTask";
builder.TaskEntryPoint = "ConnectionMonitor.CheckInternet";
builder.SetTrigger(new SystemTrigger(SystemTriggerType.InternetAvailable, false));

BackgroundTaskRegistration task = builder.Register();

لذا أعتقد أن سؤالي هو:لماذا لا يطلب مني الإذن بتشغيل مهمة في الخلفية (والتي أفترض أنها ستعطيني الإجابة على مشكلتي الرئيسية وهي سبب تعطلها)؟

لست متأكدًا مما إذا كان الأمر مهمًا أم لا، ولكن هذا تطبيق Windows Universal (يوجد app.xaml.cs أعلاه في Shared مشروع.

تبدو المهمة كما يلي:

BackgroundTaskDeferral _deferral = taskInstance.GetDeferral();

bool newConnected = IsConnected();
if (connected != newConnected)
{
    connected = newConnected;
    var notifier = ToastNotificationManager.CreateToastNotifier();
    var template = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    var element = template.GetElementsByTagName("text")[0];
    element.AppendChild(template.CreateTextNode(connected ? "Connection available" : "Connection lost"));

    var toast = new ToastNotification(template);
    notifier.Show(toast);  
}

_deferral.Complete();
هل كانت مفيدة؟

المحلول

أنت سألت: لماذا لا يطلب مني الإذن لتشغيل مهمة في الخلفية؟

الجواب هو، ما لم تتطلب مهمة الخلفية الوصول إلى شاشة القفل، فإنها لا تتطلب إذن المستخدم للتسجيل.لا يوجد أي مطالبة للمستخدم، حسب التصميم.أحد أهداف هذا التصميم هو أنه يسمح لك بتسجيل مهمة من مهمة أخرى.

في نظام التشغيل Windows، لا تحتاج إلى الاتصال BackgroundExecutionManager.RequestAccessAsync() باستثناء الوصول إلى شاشة القفل.سيؤدي الاتصال بها إلى منحك حصة أكبر ولكن سيتطلب من المستخدم الموافقة على المهمة.

في Windows Phone، الاتصال RequestAccessAsync() مطلوب مهما حدث، ولكن لا يطالب المستخدم أبدًا بواجهة مستخدم.لهذا السبب، يمكن مشاركة المنطق الموجود في تطبيقك العالمي ولكن من المحتمل أن يكون له ملف #if للتعامل مع التسجيل بشكل مختلف، إذا كان ذلك مناسبًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top