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

时间:2019-04-23 12:19:09

标签: c# uwp background-task

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

我的问题是我必须收到服务器的“开始”一词才能解锁我的启动屏幕并传递应用程序。

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

退出初始屏幕的功能:

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.");
    }
   }

我如何使其工作?

另一个问题,在关闭应用程序时如何取消后台任务?

2 个答案:

答案 0 :(得分:1)

从不执行任何需要花费应用程序线程时间的任务。这是在应用程序中引入性能问题(最好)或死锁(最坏)的肯定方法。使用BackgroundWorker处理需要时间的任务。完成任务后,请使用RunWorkerCompleted事件处理程序来更新应用程序的UI。

以下是实现BackgroundWorker类的相对简单的示例: https://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners

答案 1 :(得分:0)

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

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