Обмен данными между основным приложением и периодической задачей

Я публикую этот конкретный вопрос после другого , который я не смог решить.

Вкратце :даже если я создам статический класс (со статическими переменными и/или свойствами ), основное приложение и фоновый агент не используют один и тот же статический класс, но оба создают его новый экземпляр; поэтому невозможно обмениваться данными между этими проектами!!

Чтобы проверить это:

  • Создайте новое приложение Windows Phone (с именем AppTest )
  • . Добавьте проект ScheduledTask (с именем Agent)
  • В AppTest поместите ссылку на проект Agent
  • Создайте новый проект библиотеки Windows Phone (с именем Shared )
  • . И в AppTest , и в Agent указана ссылка на проект Shared

. Затем используйте этот базовый тестовый код.

Тест приложения

private readonly string taskName = "mytest";
PeriodicTask periodicTask = null;

public MainPage()
{
    InitializeComponent();

    Vars.Apps.Add("pluto");
    Vars.Order = 5;

    StartAgent();
}

private void RemoveTask()
{
    try
    {
        ScheduledActionService.Remove(taskName);
    }
    catch (Exception)
    {
    }
}
private void StartAgent()
{
    periodicTask = ScheduledActionService.Find(taskName) as PeriodicTask;
    if (periodicTask != null)
        RemoveTask();
    periodicTask = new PeriodicTask(taskName)
    {
        Description = "test",
        ExpirationTime = DateTime.Now.AddDays(14)
    };

    try
    {
        ScheduledActionService.Add(periodicTask);
        ScheduledActionService.LaunchForTest(taskName, 
                TimeSpan.FromSeconds(10));
    }
    catch (InvalidOperationException exception)
    {
    }
    catch (SchedulerServiceException)
    {
    }
}

Агент

protected override void OnInvoke(ScheduledTask task)
{
    if (Vars.Apps.Count > 0) 
        Vars.Order = 1;

    NotifyComplete();
}

Общий

public static class Vars
{
    public static List Apps = null;
    public static int Order;

    static Vars()
    {
        Apps = new List();
        Order = -1;
    }
}

Когда вы отлаживаете основное приложение, вы можете видеть, что вызывается статический конструктор для статического класса (, это правильно ), но при вызове агента Varsне "используется", а конструктор вызывается в другой раз, поэтому создается другой экземпляр.
Почему? Как я могу обмениваться данными между основным приложением и фоновым агентом?
Я уже пытался поместить класс Varsв класс агента и пространство имен, но поведение такое же.

8
задан Community 23 May 2017 в 11:44
поделиться