- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想我发现了 RescueAttribute 损坏的情况。也可能我没有正确使用协程。
我有一个像这样的 ViewModel:
[Rescue("Rescue")]
class MyViewModel
{
//... left out some bus-logic code here ...
public void Login()
{
yield return Show.Busy();
//the following line will also cause the problem, just like AsyncResult
//yield return Show.MessageBox("Test");
yield return new AsyncResult(() => _server.Login());
//throw new Exception("Aww, snap!");
yield return Show.NotBusy();
}
public void Rescue(Exception exc)
{
//Show a messagebox or something
}
}
AsyncResult 是这样实现的:
using Exec = Caliburn.PresentationFramework.Invocation.Execute;
public class AsyncResult : IResult
{
private readonly Action _function;
public AsyncResult(Action function)
{
_function = function;
}
public void Execute(ResultExecutionContext context)
{
Exec.OnBackgroundThread(delegate
{
try
{
_function();
}
catch (Exception exc)
{
Exec.OnUIThread(() => Completed(this, new ResultCompletionEventArgs { Error = exc, WasCancelled = true }));
return;
}
Exec.OnUIThread(() => Completed(this, new ResultCompletionEventArgs()));
});
}
public event EventHandler<ResultCompletionEventArgs> Completed = delegate { };
}
如果我在上面的 ViewModel 中取消注释异常,Rescue 将无法处理异常。
这是 Caliburn 中的错误,还是 AsyncResult 实现错误?
如果您在 yield 之前放置一个异常以返回 AsyncResult,Rescue 就可以正常工作。此外,如果在异步线程 上抛出异常,rescue 仍然有效!
编辑:您也可以使用 Show.MessageBox 而不是 AsyncResult 来重现同样的问题。
最佳答案
这似乎是一个合法的错误。我在 Caliburn 跟踪器中为此添加了一个问题:http://caliburn.codeplex.com/workitem/7636
编辑:问题已解决
参见:http://caliburn.codeplex.com/Thread/View.aspx?ThreadId=234229
关于C# 和 Caliburn - RescueAttribute 和协程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4148760/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!