小编Ric*_*ins的帖子

什么是System.Windows.ni.dll?

我正在开发一个使用ScheduledTaskAgent来更新Live Tile的WP8应用程序.这真是一个非常简单的应用程序.问题是,虽然我直接将代码从WP7项目复制到WP8项目,但它不会启动ScheduledTask.不仅如此,如果我正在调试并且我尝试启动计划任务以进行测试,则会出现错误.

System.Windows.ni.dll中发生'System.InvalidOperationException'

不仅如此,它并没有给我任何堆栈来查看,并说源不可用,我可以在反汇编窗口中查看反汇编,这对我来说没有任何意义.因此,IMO不是一个非常有用的错误.

我尝试在计划任务的构造函数中放置一个断点,它永远不会在那里.如果我注释掉测试的启动,没有错误.但是,当然,将应用程序放在我的手机中,它从未启动过,让它一夜之间.

这是我的代码:

var taskName = "TileUpdater";
            var oldTask = ScheduledActionService.Find(taskName) as PeriodicTask;
            if (oldTask != null)
            {
                ScheduledActionService.Remove(taskName);
            }
            if (useLiveTile)
            {
                //GenerateTileInfo();
                PeriodicTask task = new PeriodicTask(taskName);
                task.Description = AppResources.BackgroundTaskDescription;
                oldTask = ScheduledActionService.Find(taskName) as PeriodicTask;
                if (oldTask == null)
                {
                    ScheduledActionService.Add(task);
                }
#if DEBUG
                ScheduledActionService.LaunchForTest(taskName, TimeSpan.FromSeconds(10));
#endif
            }
Run Code Online (Sandbox Code Playgroud)

该代码在WP7版本中运行良好.:/

这是在我的WMAppManifest.xml文件中:

    <ExtendedTask Name="BackgroundTask">
        <BackgroundServiceAgent Specifier="ScheduledTaskAgent"
                                Name="xxxScheduledTask"
                                Source="xxxScheduledTask"
                                Type="xxxScheduledTask.SecheduledAgent" />
    </ExtendedTask>
Run Code Online (Sandbox Code Playgroud)

在我的计划任务中,我唯一要做的就是调用一个生成磁贴信息的过程,更新磁贴,暂时,我重新运行启动测试,所以我可以看看它是否可以再次更新,虽然我已将此注释掉了 - 我将其取消注释以粘贴到此处,但这已被注释掉了.这是我的OnInvoke方法:

    GenerateTileInfo();

    #if DEBUG
        ScheduledActionService.LaunchForTest(task.ToString(), TimeSpan.FromSeconds(60));
    #endif

    NotifyComplete();
Run Code Online (Sandbox Code Playgroud)

GenerateInfo方法不会做任何会导致问题的方法,但当然,它永远不会到达那里.我测试了我生成的tile信息并实现它,将该代码放在MainPage.xaml.cs中并立即调用它,看它是否有效,并且我调用的代码工作正常.因此,如果我打开应用程序,则会更新磁贴.现在我需要让后台任务工作.

任何人都可以提供任何帮助非常感谢.另一个线索是,昨晚我收到一个错误,涉及无法找到pdb文件 - 我认为它是Microsoft.Phone.pdb,但不管它是什么,它也提到了System.Windows.ni.dll文件,但现在我没有得到那个pdb问题,只是这个InvalidOperationException.昨晚调试符号(我不知道这意味着什么)没有加载.今天他们是.我不知道我做了什么来解决它.对于我所知道的一切,本可以重启一下.

此外,我尝试创建一个新项目并将我的代码复制到一个新项目,认为我可能有一个损坏的项目文件,但我现在得到的错误与我今天早些时候得到的相同,这促使我创建新的项目.

再次,任何帮助表示赞赏.谢谢. …

windows-phone visual-studio-2012 windows-phone-8

7
推荐指数
1
解决办法
6523
查看次数

有没有人知道ReactiveUI的ReactiveCommand的一个很好的例子?

我没经验,特别是在MVVM,但尝试使用ReactiveUI,我不理解我发现的演示ReactiveCommand的示例.我曾经使用过一次ICommand/DelegateCommand,但这是不同的,我没有得到它.

我想做的事情非常简单.单击视图中的按钮,然后在视图模型中执行该方法.我发现的所有例子都涉及IObservable <>,我不明白,因为它们没有针对我的总noob的解释.

基本上,我正在尝试将其用作学习体验,而我理想的做法是将xaml中按钮的Command属性绑定到命令(但是这有效,我不知道),这会导致一个方法执行.没有集合,我只是传递一个int变量.

谢谢您的帮助.对此,我真的非常感激.

编辑 - 使用Paul Betts的建议下面显示代码:

C#

public ReactiveCommand AddToDailyUsed { get; protected set; }

public MainPageVM()
{
    Initialize();
    AddToDailyUsed = new ReactiveCommand();
    AddToDailyUsed.Subscribe(AddToTodayUsedAction => this.AddToDailyUsedExecuted());
}

private object AddToDailyUsedExecuted()
{
    MessageBox.Show("AddToDailyUsedAction");
    return null;
}

private void AddToDailyUsedAction(object obj)
{
    MessageBox.Show("AddToDailyUsedAction");
}
Run Code Online (Sandbox Code Playgroud)

XAML

<Button Content="{Binding Strings.add, Source={StaticResource LocalStrings}}"
        Command="{Binding AddToTodayUsed}"
        Margin="-5,-10, -10,-10"
        Grid.Row="3"
        Grid.Column="2" />
Run Code Online (Sandbox Code Playgroud)

显然我错过了一些东西.我在AddToDailyUsedExecuted和AddToDailyUsedAction方法中插入了断点,但它们永远不会到达.

编辑构造函数以查看视图后面的代码:

MainPageVM mainPageVM = new MainPageVM();

public MainPage()
{
    InitializeComponent();
    Speech.Initialize();
    DataContext = mainPageVM;
    ApplicationBar = new ApplicationBar();
    TaskRegistration.RegisterScheduledTask();

    this.Loaded …
Run Code Online (Sandbox Code Playgroud)

mvvm windows-phone reactiveui windows-phone-8

5
推荐指数
1
解决办法
3316
查看次数

MVVM使用INotifyPropertyChanged模型而不通知ViewModel

我是第一次尝试使用MVVM.我有一个Windows Phone应用程序(Mango),它有一个模型类,一个视图模型类和一个视图xaml页面.我有控制(文本框)绑定到VM,并且VM绑定到模型.

模型和视图模型都实现INotifyPropertyChanged.我正在使用的实现被复制,以便我可以使用它来试图弄清楚我正在用INPC做什么.以下是两个类中列出的代码:

public event PropertyChangedEventHandler PropertyChanged;

private void NotifyPropertyChanged(String info)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(info));
   }
}
Run Code Online (Sandbox Code Playgroud)

我在Model类中有一个属性,可以手动(从文本框)设置或计算(通过更改其他属性之一).我们称之为一个结果.

如果我更改其他属性之一并逐步执行,则在Model类中的changed属性和重新计算的属性中调用INPC,尽管PropertyChangednull,因此跳过了部分代码.然后在VM中,已更改的属性逐步执行该类'INPC(作为set访问器的一部分),而这次PropertyChanged不是null,因此PropertyChanged调用该方法.Result但是,对于属性,不会引发INPC(该属性没有由其他属性的set访问器调用的INPC).

这是Model中的一个属性,它不是计算属性:

public int AgeSetting
{
   get
   {
      return (int)GetValueOrDefault(AgeSettingKeyName, AgeSettingDefault);
   }
   set
   {
      AddOrUpdateValue(AgeSettingKeyName, value);
      Calculate();
   }
}
Run Code Online (Sandbox Code Playgroud)

以下是模型中计算值的属性.

public int PointsSetting
{
   get
   {
      return (int)GetValueOrDefault(PointsSettingKeyName, PointsSettingDefault);
   }
   set
   {
      AddOrUpdateValue(PointsSettingKeyName, value);
   }
}
Run Code Online (Sandbox Code Playgroud)

从ViewModel,这里有两个属性:

public int Age
{
   get
   { …
Run Code Online (Sandbox Code Playgroud)

c# silverlight mvvm windows-phone-7 windows-phone-7.1

4
推荐指数
1
解决办法
4755
查看次数

计划任务出现两次

我提交失败(甚至无法通过上传验证),因为我的后台代理创建了两个实例,但我无法弄清楚原因.

这是app.xaml.cs中的方法(我也尝试将它定位在MainPageVM.cs和MainPage.xaml.cs中,结果相同)

private void RegisterBackgroundTask()
{
    var taskName = "xxUpdater";
    var oldTask = ScheduledActionService.Find(taskName) as PeriodicTask;
    if (oldTask != null)
    {
        ScheduledActionService.Remove(taskName);
    }
    PeriodicTask task = new PeriodicTask(taskName);
    task.Description = Strings.xxBackgroundTaskDescription;
    oldTask = ScheduledActionService.Find(taskName) as PeriodicTask;
    if (oldTask == null)
    {
        ScheduledActionService.Add(task);                 
    }
    //ScheduledActionService.LaunchForTest(taskName, TimeSpan.FromSeconds(60));
}
Run Code Online (Sandbox Code Playgroud)

这是在Application_Launching中的调用:

private void Application_Launching(object sender, LaunchingEventArgs e)
{
      { RegisterBackgroundTask(); }
}
Run Code Online (Sandbox Code Playgroud)

应用程序第一次运行时,我退出,查看,并且有一项任务.然后我再次运行,单步执行,删除调用关闭任务(而不是删除它).当它进入add调用时,它不仅会打开原始任务,而且还会添加另一个.从那时起,当我退出并重新启动应用程序时,删除将关闭一个实例,然后离开另一个实例,并且Add调用将其重新打开.除非在重建或卸载之后,否则oldTask为null.

if(oldTask == old)最初并不存在,我添加它希望它会阻止第二个实例的创建.有时,当我卸载时,仍然有一个后台任务被关闭,我必须关闭手机并重新打开它才能让它消失.

windows-phone-7 windows-phone-7.1

2
推荐指数
1
解决办法
436
查看次数

如何找到乱序记录 - SQL?

假设我有一个带有ID标识列的表,一些数据和一个日期戳.像这样:

1   data    5/1/2013 12:30
2   data    5/2/2013 15:32
3   data    5/2/2013 16:45
4   data    5/3/2013 9:32
5   data    5/5/2013 8:21
6   data    5/4/2013 9:36
7   data    5/6/2013 11:42
Run Code Online (Sandbox Code Playgroud)

如何编写一个查询,向我显示一个时间戳为5/4的记录?该表有数百万条记录.我做了一些搜索,但我不知道该怎么称呼我正在寻找的东西.:/

t-sql sql-server

2
推荐指数
1
解决办法
286
查看次数