【发布时间】:2014-08-09 15:52:16
【问题描述】:
我正在尝试实现 windows phone 8.1 通知后台任务。
它是用一个错误实现的! Toast 通知消息将多次出现在操作中心。有时9次。
这是我的代码:
public sealed class my_bg_notifier: IBackgroundTask
{
public async void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
bool status = await notificationChecker.check();
if (status)
{
populateNotification(notificationChecker.count);
}
deferral.Complete();
}
}
我尝试调试,所以我在行状态上放置了一个断点。
我很惊讶它被多次调用,这就是为什么我的通知会弹出多次。
并且从调试器断点显示的消息清楚地表明有多个线程同时执行相同的工作。
所以我想通过使用布尔标志来防止多个线程运行该方法,如下所示:
public sealed class my_bg_notifier: IBackgroundTask
{
private static bool isNotBusy = true;
public async void Run(IBackgroundTaskInstance taskInstance)
{
if (isNotBusy)
{
isNotBusy = false;
var deferral = taskInstance.GetDeferral();
bool status = await notificationChecker.check();
if (status)
{
populateNotification(notificationChecker.count);
}
deferral.Complete();
}
isNotBusy = true;
}
}
但还是不行。
我的问题是:
为什么后台任务会同时由多个线程运行多次。
我怎样才能阻止这种行为?我应该使用 lock 关键字吗?
【问题讨论】:
标签: multithreading windows-phone winrt-xaml background-task