我在另一个我无法解决 的问题之后发布了这个特定问题。
简而言之:即使我创建了一个静态类(带有静态变量和/或属性),主应用程序和后台代理也不使用相同的静态类,而是都创建了它的新实例;所以不可能在这些项目之间共享数据!!
要测试它:
- 创建一个新的 Windows Phone 应用程序(称为AppTest)
- 添加一个 ScheduledTask 项目(称为Agent)
- 在AppTest中引用项目代理
- 创建一个新的 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<string> Apps = null;
public static int Order;
static Vars()
{
Apps = new List<string>();
Order = -1;
}
}
当您调试主应用程序时,您可以看到调用了静态类的静态构造函数(这是正确的),但是调用代理时Vars
没有“使用”,而是再次调用构造函数,因此创建了一个不同的实例。
为什么?如何在主应用程序和后台代理之间共享数据?
我已经尝试将Vars
类放在代理类和命名空间中,但行为是相同的。