Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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# 使用本地/匿名操作时未触发MvvmLight消息_C#_Mvvm Light - Fatal编程技术网

C# 使用本地/匿名操作时未触发MvvmLight消息

C# 使用本地/匿名操作时未触发MvvmLight消息,c#,mvvm-light,C#,Mvvm Light,当我使用匿名操作时,MvvmLight messenger有时无法工作。如果我将一个成员变量或方法作为操作传递,它可以正常工作,但使用匿名lambda或局部变量不起作用 private SongCollection songCollection; Action<bool> c; public MyService(SongCollection songCollection) { this.songCollection = songColl

当我使用匿名操作时,MvvmLight messenger有时无法工作。如果我将一个成员变量或方法作为操作传递,它可以正常工作,但使用匿名lambda或局部变量不起作用

    private SongCollection songCollection;
    Action<bool> c;
    public MyService(SongCollection songCollection)
    {
        this.songCollection = songCollection;

        Action<bool> a = (bool isLoading) =>
        {
            ChangeSong(songCollection.GetFirstSong());
        }; 

        Action<bool> b = OnLoadingComplete; //Using this instead of 'a' works.
        //c = a; //Uncommenting this line makes it work, even if using 'a'.

        Messenger.Default.Register<bool>(this, "IsLoading", a); //Doesn't work.
    }
私人歌曲集歌曲集;
行动c;
公共MyService(SongCollection SongCollection)
{
this.songCollection=songCollection;
动作a=(布尔isLoading)=>
{
ChangeSong(songCollection.GetFirstSong());
}; 
操作b=OnLoadingComplete;//使用此选项而不是“a”可以工作。
//c=a;//取消注释这一行可以使它工作,即使使用“a”。
Messenger.Default.Register(这个“IsLoading”,a);//不起作用。
}
我猜这与垃圾收集或MvvmLight在幕后的工作方式有关。还是我遗漏了一些明显的东西


我正在.Net4.0上使用MvvmLight版本
4.3.31.1

您的代码对我来说很好(使用与您相同的版本--.NET 4.0和MvvmLight 4.3.31.1)。当使用“a”时,一定是有什么原因导致您的
MyService
被垃圾收集,而不是在使用“b”或“c”时。但是我想不出会是什么。onload complete和DoSomething的定义是什么?两者都是一样的:
ChangeSong(songCollection.GetFirstSong())
但是两个中的断点都不会被命中。该服务被大量使用,因此不应该被垃圾收集。与构造函数中的局部变量不同,使用“c”是因为MyService中的引用是保留的。如果没有messenger执行操作,我希望本地变量被垃圾收集。这些方法是公共的、私有的还是受保护的?