Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackgroundTaskBuilder.Register引发异常_C#_Windows Phone 8.1_Background Task - Fatal编程技术网

C# BackgroundTaskBuilder.Register引发异常

C# BackgroundTaskBuilder.Register引发异常,c#,windows-phone-8.1,background-task,C#,Windows Phone 8.1,Background Task,我正在尝试使用GattCharacteristicNotificationTrigger注册后台任务,以接收来自BLE设备的数据,但无论我做什么,应用程序在到达.register()行时总是抛出异常。我已经参考了很多其他地方的指南,我相信我正在做所有需要的事情。下面是一份清单,突出了所需内容。就背景任务而言,我没有做更多或更少的工作: 1) 在Package.appxmanifest中设置后台任务的声明,如下所示: <Extensions> <Extensi

我正在尝试使用GattCharacteristicNotificationTrigger注册后台任务,以接收来自BLE设备的数据,但无论我做什么,应用程序在到达.register()行时总是抛出异常。我已经参考了很多其他地方的指南,我相信我正在做所有需要的事情。下面是一份清单,突出了所需内容。就背景任务而言,我没有做更多或更少的工作:

1) 在Package.appxmanifest中设置后台任务的声明,如下所示:

      <Extensions>
    <Extension Category="windows.backgroundTasks" EntryPoint="AgHost.BackgroundTask">
      <BackgroundTasks>
      <Task Type="systemEvent" />
      </BackgroundTasks>
    </Extension>
    <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundBLEService.MyBLEService">
      <BackgroundTasks>
        <m3:Task Type="gattCharacteristicNotification" />
      </BackgroundTasks>
    </Extension>
  </Extensions>
4) 在我的主应用程序中注册事件,如下所示:

            GattCharacteristicNotificationTrigger trigger = new GattCharacteristicNotificationTrigger(thermometerCharacteristic); //thermometerCharacteristic is defined in another block of code
            await BackgroundExecutionManager.RequestAccessAsync();
            BackgroundTaskBuilder BLETaskBuilder = new BackgroundTaskBuilder();
            BLETaskBuilder.Name = "DataReceiveNotifier";
            BLETaskBuilder.TaskEntryPoint = "BackgroundBLEService.MyBLEService";
            BLETaskBuilder.SetTrigger(trigger);
            App.MyBackgroundTask = BLETaskBuilder.Register();
5) 确保后台任务入口点的字符串序列与后台项目的namespace.classname拼写完全匹配。我已经在Package.appxmanifest和我试图注册任务的主项目中检查并再次检查了拼写

但是当代码到达.Register()行时,我仍然有第一次机会遇到异常。有关此异常的更多详细信息:

  • HResult:-2147221164
  • 消息:未注册类(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))

知道我做错了什么吗?我发现了一个类似的问题,但没有得到明确的回答。

很可能您在TaskEntryPoint的类名不正确。最好用
BLETaskBuilder.TaskEntryPoint=typeof(ClassName).FullName
而不是硬编码字符串


这样,如果您更改了类的名称,而忘记在C代码中的其他地方执行此操作,则代码将无法编译,并且由于错误而更容易发现。

很可能您在TaskEntryPoint的类名不正确。最好用
BLETaskBuilder.TaskEntryPoint=typeof(ClassName).FullName
而不是硬编码字符串


这样,如果您更改了类的名称,而忘记在C代码中的其他地方执行此操作,您的代码将无法编译,并且会因为错误而更容易被发现。

问题解决了:我正在处理的项目最初是从GitHub拉出来的,目标是Windows Phone 8。后来我对它做了很大的修改,所以有很多未使用的页面和引用,当我决定添加BLE功能时,我将其重新定位到WindowsPhone8.1

但由于这个问题没有解决方案,我决定做最后的尝试,创建一个新的8.1项目,并从另一个项目复制所有相关代码。我没有对上面粘贴的代码做任何更改,后台任务现在运行得很好


这表明重定目标的项目并不总是正常工作。

问题解决了:我正在处理的项目最初是从GitHub中提取出来的,目标是Windows Phone 8。后来我对它做了很大的修改,所以有很多未使用的页面和引用,当我决定添加BLE功能时,我将其重新定位到WindowsPhone8.1

但由于这个问题没有解决方案,我决定做最后的尝试,创建一个新的8.1项目,并从另一个项目复制所有相关代码。我没有对上面粘贴的代码做任何更改,后台任务现在运行得很好

只是为了说明重定目标的项目并不总是正常工作。

以防万一

当您使用
builder.SetTrigger(new TimeTrigger(15,false))
时,您需要检查
Timer
以及
Package.appxmanifest
文件中的
System Event
。它对我有用。

以防万一


当您使用
builder.SetTrigger(new TimeTrigger(15,false))
时,您需要检查
Timer
以及
Package.appxmanifest
文件中的
System Event
。它对我有效。

您是否可以与该问题共享一个示例项目?您是否可以检查您的代码是否使用不同的触发器(例如TimeTrigger)运行?它现在在.Register()行上抛出System.UnauthorizedAccessException。除了在Package.appxmanifest中添加使用计时器的声明外,还需要进行其他更改吗?整个项目相当大,因为它的资产中有一堆音频文件。请看一看-它是一个简单的使用计时器的背景taks。我也遇到了类似的异常,当我在入口点和声明中使用了错误的命名空间/类名时。您是否可以与该问题共享一个示例项目?您是否还可以检查代码是否使用不同的触发器(例如TimeTrigger)运行?它现在在.Register()行上抛出System.UnauthorizedAccessException。除了在Package.appxmanifest中添加使用计时器的声明外,还需要进行其他更改吗?整个项目相当大,因为它的资产中有一堆音频文件。请看一看-它是一个简单的使用计时器的背景taks。当我在入口点和声明中使用了错误的名称空间/类名时,我也会遇到类似的异常。还是一样的例外。试过了。还是同样的例外。我有一个相反的问题,我的时间触发器工作不可靠。在某个时候,我在注册中添加了
newsystemcondition(SystemConditionType.InternetAvailable)
;我猜这就是引入不可靠性的时候。无论如何,将
添加到清单中修复了问题,所以谢谢。我遇到了相反的问题,有点——我的时间触发器工作不可靠。在某个时候,我在注册中添加了
newsystemcondition(SystemConditionType.InternetAvailable)
;我猜这就是引入不可靠性的时候。无论如何,将
添加到清单中解决了问题,谢谢。
            GattCharacteristicNotificationTrigger trigger = new GattCharacteristicNotificationTrigger(thermometerCharacteristic); //thermometerCharacteristic is defined in another block of code
            await BackgroundExecutionManager.RequestAccessAsync();
            BackgroundTaskBuilder BLETaskBuilder = new BackgroundTaskBuilder();
            BLETaskBuilder.Name = "DataReceiveNotifier";
            BLETaskBuilder.TaskEntryPoint = "BackgroundBLEService.MyBLEService";
            BLETaskBuilder.SetTrigger(trigger);
            App.MyBackgroundTask = BLETaskBuilder.Register();