我想在我的應用程序使用PeriodicTask
,但它調用OnInvoke()
方法與此異常之前失敗時FileNotFoundException異常運行PeriodicTask
System.IO.FileNotFoundException
無法加載文件或程序集'LockscreenAgent,Culture = neutral,PublicKeyToken = null'或它的一個依賴關係。該系統找不到指定的文件。
這裏是我的代碼(我省略了ScheduledAgent
的代碼,因爲它創建它之前甚至失敗!):
(App.xaml.cs)
pblic App(){
(... default code ...)
InitializeAgent();
}
private const string PeriodicTaskName = "LockscreenAgent";
private PeriodicTask _periodicTask;
private async void InitializeAgent()
{
//Checks if we need to ask user's permission to set the lockscreen
if (!LockScreenManager.IsProvidedByCurrentApplication)
{
// If you're not the provider, this call will prompt the user for permission.
// Calling RequestAccessAsync from a background agent is not allowed.
await LockScreenManager.RequestAccessAsync();
}
// User gave us permission, let's start the background agent!
if (!LockScreenManager.IsProvidedByCurrentApplication) return;
// Start the agent
StartPeriodicAgent();
}
private void StartPeriodicAgent()
{
// is old task running, remove it
_periodicTask = ScheduledActionService.Find(PeriodicTaskName) as PeriodicTask;
if (_periodicTask != null)
{
try
{
ScheduledActionService.Remove(PeriodicTaskName);
}
catch (Exception)
{
}
}
// create a new task
_periodicTask = new PeriodicTask(PeriodicTaskName)
{
Description = "This is LockscreenPreview image provider app.",
ExpirationTime = DateTime.Now.AddDays(14)
};
try
{
// add this to scheduled action service
ScheduledActionService.Add(_periodicTask);
// debug, so run in every 30 secs
#if DEBUG
ScheduledActionService.LaunchForTest(PeriodicTaskName, TimeSpan.FromSeconds(30));
Debug.WriteLine("Periodic task is started: " + PeriodicTaskName);
#endif
}
catch (InvalidOperationException exception)
{
if (exception.Message.Contains("BNS Error: The action is disabled"))
{
// load error text from localized strings
MessageBox.Show("Background agents for this application have been disabled by the user.");
}
if (
exception.Message.Contains(
"BNS Error: The maximum number of ScheduledActions of this type have already been added."))
{
// No user action required. The system prompts the user when the hard limit of periodic tasks has been reached.
}
}
catch (SchedulerServiceException)
{
// No user action required.
}
}
(WMAppManifest。 xaml)
<Tasks>
<DefaultTask Name="_default" NavigationPage="MainPage.xaml" />
<ExtendedTask Name="BackgroundTask">
<BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="LSAgent" Source="LockscreenAgent" Type="LockscreenAgent.ScheduledAgent" />
</ExtendedTask>
</Tasks>
<Tokens>
...
</Tokens>
<Extensions>
<Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" />
</Extensions>
任何猜測?