C# MVVM灯光混乱问题
我在我的WPF应用程序中使用MVVM Light Messenger,但有些东西没有按预期工作 我的视图模型注册了一个令牌。我使用“长”对象作为标记。 例如,我的代码使用令牌5注册,然后向服务发送请求。 当服务回复时,它在我的第二个视图模型中处理,然后该视图模型将使用相同的令牌发送消息 当我调试并打印消息的注册和发送时,它看起来是正常的,但是由于某些原因,并不是所有的messenger都被注册者接收到 我的注册和处理如下:C# MVVM灯光混乱问题,c#,wpf,mvvm-light,C#,Wpf,Mvvm Light,我在我的WPF应用程序中使用MVVM Light Messenger,但有些东西没有按预期工作 我的视图模型注册了一个令牌。我使用“长”对象作为标记。 例如,我的代码使用令牌5注册,然后向服务发送请求。 当服务回复时,它在我的第二个视图模型中处理,然后该视图模型将使用相同的令牌发送消息 当我调试并打印消息的注册和发送时,它看起来是正常的,但是由于某些原因,并不是所有的messenger都被注册者接收到 我的注册和处理如下: private void registerTest() { lo
private void registerTest()
{
long tokenId = getNextToken();
ExtraData data = new ExtraData();
Messenger.Default.Register<MyMsg>(this, tokenId, (m) => recieve(m,data));
}
private void receive(MyMsg m,ExtraData data)
{
Messenger.Default.Unregister<MyMsg>(this, m.tokenId);
}
private void sendTest(long tokenId)
{
Messenger.Default.Send(new MyMsg(tokenId), tokenId);
}
我总是在sendTest中收到令牌X之前向其注册,
但由于某些原因,有时在调用sendTest(X)时,它不会被接收
有人知道发生了什么吗?您应该将您的
ExtraData
作为消息的类属性,以便能够从不同的来源与它进行交互
public class MyMsg {
public int TokenId {get;set;}
public ExtraData Data {get;set;}
}
public void registerTest()
{
Messenger.Default.Register<MyMsg>(this, recieve);
}
public void recieve(MyMsg myMsg)
{
Messenger.Default.Unregister<MyMsg>(this, myMsg.TokenId);
//Note that you can also access m.Data here if you need to
}
public void sendTest()
{
var myMsg = new MyMsg {TokenId = GetNextToken(), Data = new ExtraData()};
Messenger.Default.Send(myMsg);
}
公共类MyMsg{
公共int标记ID{get;set;}
公共外部数据数据{get;set;}
}
公共无效注册表测试()
{
Messenger.Default.Register(此,Receive);
}
公共无效接收(MyMsg MyMsg)
{
Messenger.Default.Unregister(这是myMsg.TokenId);
//请注意,如果需要,您也可以在此处访问m.数据
}
公共测试()
{
var myMsg=new myMsg{TokenId=GetNextToken(),Data=new ExtraData()};
Messenger.Default.Send(myMsg);
}
你们班的其他同学长什么样?您是如何注入messenger的?问题似乎出现在操作中的lambda中,如果不在lambda中使用局部变量,这将起作用。我在这里找到了一个相关的例子哦!我想我明白你在说什么了…我只是做了一个大的编辑,因为在堆栈编辑器中编写代码有一些不好的地方。