C# Caliburn.Micro未找到方法的目标

C# Caliburn.Micro未找到方法的目标,c#,windows-phone-7,caliburn.micro,C#,Windows Phone 7,Caliburn.micro,我在WP7项目中使用Caliburn.Micro,我的一些页面经常出现这种奇怪的错误。我自己无法复制它,但它经常出现在Bugsense日志中。这就是我使用它的方式。 XAML: 在我的ViewModel中: public async Task Init() {...} 或者在其他页面上 public void Init() {...} 这是Bugsense的stacktrace: 0 System.Exception: No target found for method Init.

我在WP7项目中使用Caliburn.Micro,我的一些页面经常出现这种奇怪的错误。我自己无法复制它,但它经常出现在Bugsense日志中。这就是我使用它的方式。 XAML:

在我的ViewModel中:

public async Task Init() {...}   
或者在其他页面上

public void Init() {...}
这是Bugsense的stacktrace:

0 System.Exception: No target found for method Init.
1 at Caliburn.Micro.ActionMessage.Invoke(Object eventArgs)
2 at System.Windows.Interactivity.TriggerAction.CallInvoke(Object parameter)
3 at System.Windows.Interactivity.TriggerBase.InvokeActions(Object parameter)
4 at System.Windows.Interactivity.EventTriggerBase.OnEvent(EventArgs eventArgs)
5 at System.Windows.Interactivity.EventTriggerBase.OnEventImpl(Object sender, EventArgs eventArgs)
6 at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
7 at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)

有没有关于如何确定错误的想法?

所以你使用void Init()启动Task Init()?没有,我使用
void Init()
在一些页面上执行一些简单的加载后操作,但在其他页面上,当我需要使用一些异步功能(如从webservice获取字符串)时,我使用
Task Init()
签名这可能是你的问题,如果签名匹配(通常意味着
public void
),Message.Attach将在VM上调用Init(),但是对于页面,除非您使用页面的加载事件,否则CM不会在视图上找到Init()。如果你把视图拉到虚拟机中,会破坏mvvm/可测试性。这里的主要问题是我不能重现这个问题,它只是出现在日志中。如果它只在大约1%的情况下失败,会有什么错呢?老实说,除了找不到与调用关联的上下文之外,我一点也不知道,这意味着调用Init()的对象实际上可能在ViewModel中没有关联的签名。
0 System.Exception: No target found for method Init.
1 at Caliburn.Micro.ActionMessage.Invoke(Object eventArgs)
2 at System.Windows.Interactivity.TriggerAction.CallInvoke(Object parameter)
3 at System.Windows.Interactivity.TriggerBase.InvokeActions(Object parameter)
4 at System.Windows.Interactivity.EventTriggerBase.OnEvent(EventArgs eventArgs)
5 at System.Windows.Interactivity.EventTriggerBase.OnEventImpl(Object sender, EventArgs eventArgs)
6 at MS.Internal.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args)
7 at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, Int32 actualArgsTypeIndex, String eventName)