有没有人有一个如何在Windows 8 Metro应用程序中单元测试异步方法的示例,以确保它抛出所需的异常?
给定一个具有异步方法的类
public static class AsyncMathsStatic
{
private const int DELAY = 500;
public static async Task<int> Divide(int A, int B)
{
await Task.Delay(DELAY);
if (B == 0)
throw new DivideByZeroException();
else
return A / B;
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用新的Async.ExpectsException构造编写测试方法.我试过了 :-
[TestMethod]
public void DivideTest1()
{
Assert.ThrowsException<DivideByZeroException>(async () => { int Result = await AsyncMathsStatic.Divide(4, 0); });
}
Run Code Online (Sandbox Code Playgroud)
但是当然测试不会等待异步方法完成,因此导致测试失败,但没有抛出异常.
是否存在与WPF应用程序相关的每个DispatcherPriority枚举值的确切含义的任何文档.
特别是Background/ ContextIdle/ 之间有什么实际区别ApplicationIdle吗?我发现自己在代码的各个部分使用了每个部分,并希望标准化一个值.
典型用法是在数据绑定的TreeView控件中.当设置一个项目时(在ViewModel中),我想首先展开它的所有父项(再次在ViewModel中),然后在实际设置selected属性之前等待它们完全呈现(在View中).
有没有人知道从安全的azure blob(通过https)将.mp4视频流式传输到WPF应用程序的方法.
我按照以下方式生成uri ...
public Uri GetSecureUriForBlob(CloudBlobContainer container, string blobName)
{
var blockBlob = container.GetBlockBlobReference(blobName);
var beforeOffset = new DateTimeOffset(DateTime.UtcNow.AddMinutes(-5));
var afterOffset = new DateTimeOffset(DateTime.UtcNow.AddHours(1));
var builder = new UriBuilder(blockBlob.Uri)
{
Query = blockBlob.GetSharedAccessSignature(
new SharedAccessBlobPolicy
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessStartTime = beforeOffset,
SharedAccessExpiryTime = afterOffset
}).TrimStart('?')
};
return builder.Uri;
}
Run Code Online (Sandbox Code Playgroud)
我已检查服务版本是否至少设置为"2013-08-15",并且blob项目具有正确的内容类型集.
我知道uri的格式是正确的,因为我可以将其粘贴到浏览器中,并在Windows 8商店应用程序中使用它,并且视频流正确.
但是,当我为WPF MediaElement分配相同的uri时,我在MediaPlayer.Open()的内部工作中得到了一个NullReferenceException.
如果我有一个带回调的异步方法
MyMethodAsync( <Input Parameters ...>, Callback);
Run Code Online (Sandbox Code Playgroud)
我怎么能让它等待?
[此方法适用于Windows Phone 7,但同样适用于任何类似的c#构造]
DNSEndpoint Endpoint = ...
NameResolutionCallback Callback = (nrr) => { ... }
DeviceNetworkInformation.ResolveHostNameAsync(Enpoint, Callback, null);
Run Code Online (Sandbox Code Playgroud)
我想在这个调用周围放一个等待的包装器,所以我等待回调完成后再继续下一个命令.
有没有办法在每次击键后更新文本绑定?
我的WPF自定义TextBox使用KeyUp事件
private void MyTextBox_KeyUp(object sender, System.Windows.Input.KeyEventArgs e)
{
BindingExpression BE = GetBindingExpression(TextBox.TextProperty);
if (BE != null)
BE.UpdateSource();
}
Run Code Online (Sandbox Code Playgroud)
但BindingExpression在Windows 8/RT/Store中不存在.