2012-05-09 17 views
5

Tôi có một ứng dụng Windows Phone 7 được triển khai trên thị trường cập nhật Live Tile của nó thông qua một tác nhân nền PeriodicTask.ScheduledActionService.Find ném ArgumentException

Một người dùng đang báo cáo vấn đề với ô không còn cập nhật sau khi nó đã hoạt động được một thời gian.

Khi họ kiểm tra các tác vụ nền trên điện thoại bị tắt và hộp kiểm "Bật lại tác vụ nền cho ứng dụng này vào lần sau khi mở ứng dụng" được chọn.

Sau khi mở ứng dụng và thử hoạt động lại, nhiệm vụ nền không tiếp tục.

Tôi nghi ngờ điều này có thể liên quan đến hai báo cáo sự cố tôi đã nhìn thấy trong App Hub:

Problem Function: Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr

Exception Type: ArgumentException

Stack Trace:

Frame Image Function Offset
0 coredll.dll xxx_RaiseException 19
1 mscoree3_7.dll WatsonUnhandledManagedException 296
2 mscoree3_7.dll Dbg_NotifyManagedException 93
3 mscoree3_7.dll FirstPassException 1044
4 TransitionStub 0
5 Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr 248
6 Microsoft.Phone.Scheduler.SystemNotificationInterop.GetNotificationByID 156
7 Microsoft.Phone.Scheduler.ScheduledActionService.Find 276
8 MyApp.Agents.TaskIsActive 60
9 MyApp.MainPage.SetupApplicationBar 44
10 MyApp.MainPage.MainPage_Loaded 100
11 MS.Internal.CoreInvokeHandler.InvokeEventHandler 3660
12 MS.Internal.JoltHelper.FireEvent 1348
13 mscoree3_7.dll IL_CallManaged 884
14 mscoree3_7.dll IL_CallDelegateInternal 176
15 mscoree3_7.dll makeComPlusCall 5255
16 mscoree3_7.dll makeComPlusCallReturnInt 21
17 0
18 agcore.dll CCoreServices::CLR_FireEvent 385

Các cuộc gọi đến Microsoft.Phone.Scheduler.ScheduledActionService.Find được kết quả là một ArgumentException.

Thông số tên tôi đang gọi phương thức Tìm đến từ private const string để giá trị sẽ giống nhau với mỗi cuộc gọi.

Tôi có nên bắt ngoại lệ này và giả sử tác nhân nền không có mặt hoặc có biểu thị điều gì đó sai với đại lý không?

Ở giai đoạn này, tôi không thể tạo lại ngoại lệ khi chạy ứng dụng trong trình mô phỏng.


"When [the] Background Agent crashes two times in sequence, it's removed from scheduling"

Tôi đã thử cố tình đâm ScheduledAgent trên mỗi gọi như sau:

protected override void OnInvoke(ScheduledTask task) 
{ 
    UpdateTile(); 

#if DEBUG 
    // If we're debugging, fire the task again 
    ScheduledActionService.LaunchForTest("MyScheduledTaskAgent", new TimeSpan(0, 0, 30)); 
    throw new Exception("Bang"); 
#endif 

    NotifyComplete(); 
} 

này gây ra các tác vụ chạy nền để tắt theo các cài đặt trong giả lập sau hai lời gọi. Tuy nhiên, nếu tôi mở lại các cuộc gọi ứng dụng để ScheduledActionService.Find làm việc mà không có một ngoại lệ. Tôi cũng có thể loại bỏ PeriodicTask không thành công và thêm một cá thể mới không có vấn đề.


"an exception can be thrown when the background agent is deactivated in the phone's settings. I think in that case the exception is thrown on ScheduledActionService.Add, not ScheduledActionService.Find"

tôi đã cố gắng này trong giả lập. Tôi nhận được ngoại lệ sau đây từ ScheduledActionService.Add(task);:

System.InvalidOperationException - "BNS Lỗi: Các hành động bị vô hiệu hóa \ r \ n"

Các cuộc gọi đến ScheduledActionService.Find vẫn hoạt động tốt.

+0

"Ở giai đoạn này, tôi không thể tạo lại ngoại lệ khi chạy ứng dụng trong trình mô phỏng." Tôi biết một ngoại lệ có thể được ném khi tác nhân nền bị tắt trong cài đặt của điện thoại. Tôi nghĩ trong trường hợp đó, ngoại lệ được ném vào 'ScheduledActionService.Add', không phải là' ScheduledActionService.Find', nhưng bạn nên thử nó. –

+0

Khi 'Tác nhân nền 'bị treo hai lần theo trình tự, nó bị xóa khỏi quá trình lên lịch. Có lẽ một số trường hợp ngoại lệ được ném ở đây gây ra hành vi này ... – Ku6opr

+0

@ Ku6opr, cảm ơn đề xuất. Tôi đã thử và cập nhật câu hỏi với kết quả. Nó không phải là nguyên nhân. –

Trả lời

1

Tôi đã quản lý để tạo lại ArgumentException và StackTrace trong trình mô phỏng và trên thiết bị cầm tay được gắn vào máy tính của tôi.

Các bước là:

  1. Đặt một điểm break trong một trình xử lý ngoại lệ xung quanh cuộc gọi đến ScheduledActionService.Find(TASK_NAME)
  2. Khởi động ứng dụng trong các giả lập (hoặc thiết bị cầm tay) với trình gỡ lỗi gắn
  3. Sử dụng pin mục trình đơn để bắt đầu các đại lý nền PeriodicTask. Lưu ý rằng trong chế độ gỡ lỗi, tôi gọi ScheduledActionService.LaunchForTest(TASK_NAME, new TimeSpan(0, 0, 1)); ngay lập tức sau khi thêm PeriodicTask.
  4. Điều hướng đến trang phụ trong ứng dụng của tôi.
  5. Nhanh chóng sử dụng nút quay lại để quay lại MainPage và sau đó lại thoát khỏi ứng dụng. Sự kiện được tải trên MainPage gọi SetupApplicationBar(), cuối cùng gọi phương thức ScheduledActionService.Find().
  6. Vì ứng dụng đang tắt ngoại lệ sẽ xảy ra.

Exception Type: ArgumentException

Message: E_INVALIDARG

StackTrace:

at Microsoft.Phone.Scheduler.SystemNotificationInterop.CheckHr(Int32 hr)
at Microsoft.Phone.Scheduler.SystemNotificationInterop.GetNotificationByID(Guid notificationID)
at Microsoft.Phone.Scheduler.ScheduledActionService.Find(String name)
at SolarCalculator.Agents.TaskIsActive()
at SolarCalculator.MainPage.SetupApplicationBar()
at SolarCalculator.MainPage.MainPage_Loaded(Object sender, RoutedEventArgs e)
at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

Cho rằng ứng dụng được tắt và tôi chỉ cố gắng tìm hiểu xem các đại lý nền đang chạy tôi con số đó là an toàn để nắm bắt những ngoại lệ và trả về false từ phương pháp TaskIsActive() tôi.

Bây giờ tôi biết thông báo từ ArgumentException là E_INVALIDARG tôi đã tìm thấy Setting alarm in Windows Phone 7 mô tả việc nhận được cùng một lỗi khi thực hiện cuộc gọi đến ScheduleActionService trong sự kiện Application_Exit.

+0

Tôi đã nhìn thấy một ngăn xếp sự cố tương tự: http://forums.create.msdn.com/forums/p/106202/625836.aspx#625836 –

Các vấn đề liên quan