如何从后台任务在主应用程序上执行功能

How to execute a function on the main app from a background task

我目前正在开发一个必须连接到同一网络上的远程服务器才能启动的 HMI。为此,我使用了 UWP 平台的启动画面功能,它允许我模拟加载页面。

我的问题是我必须从服务器接收到单词 "start" 才能解锁启动画面并传递应用程序。

所以我尝试直接从我的后台调用这个函数,但不可避免地它不起作用。

退出启动画面的函数:

void DismissedEventHandler(SplashScreen sender, object e)
{
    dismissed = true;
}

public void DismissExtendedSplash()
{
    rootFrame.Navigate(typeof(MainPage));
    Window.Current.Content = rootFrame;
}

void DismissSplashButton_Click(object sender, RoutedEventArgs e)
{
    DismissExtendedSplash();
}

SocketActivtyTask:

case SocketActivityTriggerReason.SocketActivity:
   var socket = socketInformation.StreamSocket;
   DataReader reader = new DataReader(socket.InputStream);
   reader.InputStreamOptions = InputStreamOptions.Partial;
   await reader.LoadAsync(250);
   var dataString = reader.ReadString(reader.UnconsumedBufferLength);

   try
   {
      if (dataString.Equals("Start"))
      {
          Debug.WriteLine("Lancement OK.");
          DismissExtendedSplash();
      }
    }
    catch
    {
          Debug.WriteLine("Lancement FAIL.");
    }
   }

我怎样才能让它发挥作用?

追加问题,关闭应用时如何取消后台任务?

切勿执行任何占用应用程序线程时间的任务。这是将性能问题(最好的)或死锁(最坏的)引入应用程序的可靠方法。对需要时间的任务使用 BackgroundWorker。当任务完成时,使用 RunWorkerCompleted 事件处理程序更新应用程序的 UI。

下面是一个相对简单的实现 BackgroundWorker class 的例子: https://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners

我认为在你的情况下,你应该使用我们所说的 BackgroundTask 作为你的最佳实践。为此,您需要先在您的应用程序中实现 IBackgroundTask,这将允许您触发特定事件。

MSDN Link https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task