예 ("백그라운드 에이전트", http://www.jeffblankenburg.com/2011/11/25/31-days-of-mango-day-25-background-agents/).
거기에서 시작한 다음 앱의 사양과 관련된보다 독립적 인 조사를 수행해야합니다.
당 제프의 기사 :
시작 Visual Studio 및 새 프로젝트를 만들 수 있습니다. Windows Phone 용 Silverlight에서 Windows Phone Application을 선택합니다. 이름을 "MyAgentApp"로 지정하십시오.
이제 기본 응용 프로그램을 만들었습니다. 이 두 가지에 대한 책임을 져야합니다 :
1) 배경 에이전트가 정보
2) 시작 및 정지 백그라운드 에이전트 자체에
살아야 배경 에이전트로 업데이트 할 수 있습니다 라이브 타일을 갖는 그 자신의 특별 프로젝트. 솔루션에 Windows Phone 예약 된 작업 에이전트를 선택하여 새 프로젝트를 추가합니다. 이름을 MyAgent로 지정하십시오. 이 프로젝트는 백그라운드에서 실행되고 라이브 타일을 업데이트 할 사용자 정의 코드를 포함합니다.
마지막으로 중요한 것은 MyAgentApp 프로젝트로 이동하여 MyAgent에 대한 프로젝트 참조를 추가하는 것입니다. 이렇게하면 응용 프로그램 내에서 에이전트를 등록 할 수 있습니다. 또한이 항목이 WMAppManifest.xml에 자동으로 만들어진 항목인지 확인하십시오.
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MyAgent" Source="MyAgent" Type="MyAgent.ScheduledAgent" />
</ExtendedTask>
</Tasks>
이제 모든 항목을 실제로 연결해야합니다.
MainPage.xaml.cs를에서
<StackPanel VerticalAlignment="Center">
<Button Content="Start Background Agent"
Click="StartButton_Click"/>
<Button Content="Stop Background Agent"
Click="StopButton_Click"/>
</StackPanel>
, 와이어까지 버튼이 에이전트를 시작하고 중지 : MainPage.xaml을 열고 다음과 에이전트를 정지 다른 에이전트를 시작하는 두 개의 버튼 하나를 추가하고
private const string TASK_NAME = "MyAgent";
private void StartButton_Click(object sender, RoutedEventArgs e)
{
StartAgent();
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
StopAgentIfStarted();
}
private void StartAgent()
{
StopAgentIfStarted();
PeriodicTask task = new PeriodicTask(TASK_NAME);
task.Description = "This is our custom agent for Day 25 - Background Agents";
ScheduledActionService.Add(task);
#if DEBUG
// If we're debugging, attempt to start the task immediately
ScheduledActionService.LaunchForTest(TASK_NAME, new TimeSpan(0, 0, 1));
#endif
}
private void StopAgentIfStarted()
{
if (ScheduledActionService.Find(TASK_NAME) != null)
{
ScheduledActionService.Remove(TASK_NAME);
}
}
사용자 지정 에이전트를 만들려면 새로운 PeriodicTask가 생성됩니다. 그런 다음 에이전트를 찾고 중지 할 때이 이름을 식별자로 사용합니다. 또한 PeriodicTask.Description을 지정했음을 주목하십시오 - 이것은 필수 필드이며 Settings | 배경 응용 프로그램 이름의 작업. MyAgent 프로젝트에서
오픈 ScheduledAgent.cs 다음과 같은 코드를 추가합니다
protected override void OnInvoke(ScheduledTask task)
{
UpdateAppTile(GetLastUpdatedTimeMessage());
}
private string GetLastUpdatedTimeMessage()
{
return string.Format("Last Updated: {0}", DateTime.Now);
}
private void UpdateAppTile(string message)
{
ShellTile appTile = ShellTile.ActiveTiles.First();
if (appTile != null)
{
StandardTileData tileData = new StandardTileData
{
BackContent = message
};
appTile.Update(tileData);
}
}
ScheduledAgent가 오버라이드 (override)하는 하나 개의 중요한 방법이있다 - OnInvoke합니다. 여기서 에이전트가 백그라운드 작업을 실행합니다. 작업이 완료되어 더 이상 에이전트를 실행하지 않아도되면 NotifyComplete()를 호출하여 작업이 성공적으로 완료되었음을 알리거나 Abort()를 호출하여 작업 취소를 알릴 수 있습니다. 간격을두고 작업을 계속 실행하려면 간단히 하나도 호출하지 마십시오. 여기서 수행중인 작업입니다.