Обмен данными между основным приложением и периодической задачей
Я публикую этот конкретный вопрос последругой Я не смог решить.
Вкратце: даже если я создаю статический класс (со статическими переменными и / или свойствами), основное приложение и фоновый агент не используют один и тот же статический класс, но оба создают новый его экземпляр; поэтому невозможно обмениваться данными между этими проектами !!
Чтобы проверить это:
Create a new Windows Phone application (called AppTest) Add a ScheduledTask project (called Agent) In AppTest put a reference to project Agent Create a new Windows Phone Library project (called Shared) Both in AppTest and Agent put a reference to project SharedЗатем используйте этот базовый тестовый код.
AppTest
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)
{
}
}
Agent
protected override void OnInvoke(ScheduledTask task)
{
if (Vars.Apps.Count > 0)
Vars.Order = 1;
NotifyComplete();
}
Shared
public static class Vars
{
public static List<string> Apps = null;
public static int Order;
static Vars()
{
Apps = new List<string>();
Order = -1;
}
}
Когда вы отлаживаете основное приложение, вы видите, что статический конструктор для статического класса вызывается (это правильно), но когда агент вызываетсяVars
не "используется" но конструктор вызывается в другой раз, поэтому создается другой экземпляр.
Зачем? Как я могу обмениваться данными между основным приложением и фоновым агентом?
Я уже пытался поставитьVars
класс в классе агента и пространстве имен, но поведение такое же.