Le programme client veut savoir si l'application UWP est actuellement en cours d'exécution (au premier plan), était déjà en cours d'exécution en arrière-plan avant l'application de bureau a ouvert la AppServiceConnection
Avant l'application de bureau a ouvert la AppServiceConnection
connexion, le client ne devrait pas être en mesure de communiquer avec le fournisseur de services de l'application, car l'application UWP est sandbox. Obtenir l'état actuel du fournisseur de services de l'application à l'intérieur de celui-ci n'a aucune utilité pour l'application cliente. Si l'application de bureau client est .NET Framework, vous pouvez essayer d'utiliser la propriété Process.Responding
pour obtenir l'état du processus du fournisseur de services. Par exemple, si Process.Responding
est vrai alors le fournisseur de service est "en cours d'exécution au premier plan", s'il est faux, le fournisseur devrait être suspendu, si juste ne peut pas trouver le processus fournisseur, il devrait être terminé.
static void Main(string[] args)
{
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
if (process.ProcessName == "AppServicesProvider")
Console.WriteLine("Process Name: {0}, Responding: {1}", process.ProcessName, process.Responding);
}
Console.ReadLine();
}
En d'autres termes, l'application doit être en mesure de transmettre, par le service d'application, où il était dans son cycle de vie.
Si vous voulez dire que le service de l'application, la façon dont vous avez mentionné ce magasin un état à l'intérieur du app data lorsque l'état d'exécution de l'application est le changement devrait bien fonctionner. Il semble que vous ne souhaitiez pas l'utiliser, mais en réalité, l'état correspondant au handle d'événement déclenché indique que l'état d'exécution de l'application est modifié.
private async void App_Suspending(object sender, SuspendingEventArgs e)
{
SuspendingDeferral deferral = e.SuspendingOperation.GetDeferral();
Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["currentlife"] = "Suspended";
deferral.Complete();
}
private async void OnAppServiceRequestReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
var messageDeferral = args.GetDeferral();
Windows.Storage.ApplicationDataContainer localSettings =Windows.Storage.ApplicationData.Current.LocalSettings;
Object value = localSettings.Values["currentlife"];
try
{
var input = args.Request.Message;
//Create the response
var result = new ValueSet();
result.Add("result", value);
//Send the response
await args.Request.SendResponseAsync(result);
}
finally
{
//Complete the message deferral so the platform knows we're done responding
messageDeferral.Complete();
}
}
L'application de bureau en question est un processus en arrière-plan qui est inclus dans le regroupement d'applications UWP via un pont de bureau. Il s'agit d'un processus de longue durée qui peut à la fois démarrer avant que l'application ne le fasse (via le lancement à Windows-login) et persister après la fermeture de l'application. Certains des messages que l'application de bureau peut envoyer à l'application UWP n'ont de sens que si l'application UWP est déjà en cours d'exécution, et non si elle est suspendue ou n'a pas encore été lancée. – CBHacking