加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-phone-7 – 如何从Windows Phone上的前台应用程序发出Sc

发布时间:2020-12-13 20:42:19 所属栏目:Windows 来源:网络整理
导读:我正在创建一个具有前台应用程序(当然)以及PeriodicTask和ResourceIntensiveTask的应用程序. 如果用户在运行时自行启动应用程序,我需要一种方法来关闭计划任务. 我没有看到任何使用系统范围的互斥锁的方法.理想情况下,当后台任务开始时,一个线程将被旋转,以
我正在创建一个具有前台应用程序(当然)以及PeriodicTask和ResourceIntensiveTask的应用程序.

如果用户在运行时自行启动应用程序,我需要一种方法来关闭计划任务.

我没有看到任何使用系统范围的互斥锁的方法.理想情况下,当后台任务开始时,一个线程将被旋转,以侦听来自前台应用程序的信号,如果它收到此信号,它可以干净地关闭后台任务.

除了轮询(比如某个特定文件的文件夹)之外,是否有人对我的前台应用程序如何发出后台应用程序启动后我的后台代理关闭信号有一个干净的建议?

我正朝着插座前进,但这看起来有点过分了.

背景:
我目前正在使用IsolatedStorage存储我的数据(而不是数据库) – 最终我将转向使用数据库.

我的前台应用程序将本地数据与Web服务同步,并在从Web服务添加新项目时更新UI.我使用我寻找的文件来查找数据项,并在新项目同步时附加到该文件中.

我希望运行后台代理以在后台执行此同步,更新隔离存储中的文件,包括索引等.但是一旦我启动前台应用程序,我需要后台应用程序停止,以便前景和后台不要同时尝试更新相同的文件.

我一次只需要一个进程来更新本地数据,我需要前台进程来抢占后台进程.

无并发更新解决方案:

申请(App()):

var m = new Mutex(false,"MyMutex");
m.WaitOne(); //When PeriodicTask runs wait

if(lastSynchronization > 1.Minutes)
{  
  //Update only when your PeriodicTask not runs before 
}

//ApplicationExit      
m.ReleaseMutex();

PeriodicTask(主线程):

var m = new Mutex(false,"MyMutex");
if(m.WaitOne(0)) // Dont wait for the handle
{
  // Synchronization

  m.ReleaseMutex(); 
}
else
{
  //Abort task (You dont want to wait for the main application)
}

Application启动解决方案时停止PeriodicTask:

申请(App()):

var m = new Mutex(false,"MyMutex");
m.WaitOne();

// Application    

m.ReleaseMutex();

PeriodicTask(单独的线程):

var m = new Mutex(false,"MyMutex");

while (m.WaitOne(0)) // Check for main application
{
   m.ReleaseMutex(); 
}

// Abort task

我认为这是WP7中可用成员的最佳解决方案:

http://msdn.microsoft.com/en-us/library/system.threading.mutex(v=VS.96).aspx

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读