小编ken*_*yzx的帖子

无法等待异步lambda

想想这个,

Task task = new Task (async () =>{
    await TaskEx.Delay(1000);
});
task.Start();
task.Wait(); 
Run Code Online (Sandbox Code Playgroud)

调用task.Wait()不等待任务完成,下一行立即执行,但如果我将async lambda表达式包装到方法调用中,代码将按预期工作.

private static async Task AwaitableMethod()
{
    await TaskEx.Delay(1000);    
}
Run Code Online (Sandbox Code Playgroud)

然后(根据svick的评论更新)

await AwaitableMethod(); 
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library async-await async-ctp

62
推荐指数
2
解决办法
6万
查看次数

空条件运算符和!=

通过在C#中引入Null-Conditional运算符,进行以下评估,

if (instance != null && instance.Val != 0)
Run Code Online (Sandbox Code Playgroud)

如果我这样改写,

if (instance?.Val != 0)  
Run Code Online (Sandbox Code Playgroud)

如果instance是null引用,它将被计算为true ; 它表现得像

if (instance == null || instance.Val != 0)
Run Code Online (Sandbox Code Playgroud)

那么使用这种新语法重写评估的正确方法是什么?

编辑:

instance是一个从JSON反序列化的大对象的字段.有很多这样的代码,首先检查字段是否在JSON中,如果是,检查Val属性是否不等于常量,只有两个条件都为真,做一些操作.

该代码本身可以被重构,使逻辑流程更加"决策意识"由彼得在他的评论中指出,虽然在这个问题上,我感兴趣的是如何使用null-conditional operators!=.

c# null evaluation

17
推荐指数
2
解决办法
7375
查看次数

在WPF中模糊背景

我试图在WPF中创建一个模糊效果,但我想模糊控件后面的内容(如网格),我不打算模糊网格的内容.

我想做这样的事情.

在此输入图像描述

.net c# wpf effects

12
推荐指数
1
解决办法
7949
查看次数

XPath:选择具有属性子节点的父节点

我想获得具有"系统"孙子的"包"节点,其具有"mtm"属性,并且"mtm"属性的值是"2055".对于以下示例文档,只应返回第一个Package节点.

我用

"/Database/Package[/SystemCompatibility/System[@mtm='2055']]"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.这个表达有什么问题?

<?xml version="1.0" encoding="UTF-8"?>
<Database version="300">
<Package id="6imb05ww" description="ThinkPad Modem Adapter">  
    <SystemCompatibility>
        <System mtm="8742" os="Windows XP" oslang="en" />
        <System mtm="2055" os="Windows XP" oslang="jp" />
    </SystemCompatibility>
</Package>
<Package id="6imb06ww" description="ThinkPad Modem Adapter">  
    <SystemCompatibility>
        <System mtm="3046" os="Windows XP" oslang="en" />
    </SystemCompatibility>
</Package>
</Database>
Run Code Online (Sandbox Code Playgroud)

xpath

9
推荐指数
1
解决办法
1万
查看次数

在win8 Metro应用程序中不会触发Debug.Assert(false)

我注意到Debug.Assert不会在Metro应用程序中触发,但是,如果项目是传统的,如Console或WinForm,它会触发.是的,我处于调试模式.

它是否在Visual Studio(11 Beta)中未正确设置?或Debug.Assert旨在在metro应用程序中禁用?

我知道在执行Metro应用程序期间会吞下许多异常,但Debug.Assert非常方便,我无法想到它应该被禁用的原因.

.net debugging assert windows-8 windows-runtime

9
推荐指数
2
解决办法
1191
查看次数

如何逃避对setCurrentCellAddressCore的重入调用?

我有一个从cell_endedit调用的函数.它在dataGridView中移动dataGridViewRow:

private void moveRowTo(DataGridView table, int oldIndex, int newIndex)
{
    if (newIndex < oldIndex)
    {
        oldIndex += 1;
    }
    else if (newIndex == oldIndex)
    {
        return;
    }
    table.Rows.Insert(newIndex, 1);
    DataGridViewRow row = table.Rows[newIndex];
    DataGridViewCell cell0 = table.Rows[oldIndex].Cells[0];
    DataGridViewCell cell1 = table.Rows[oldIndex].Cells[1];
    row.Cells[0].Value = cell0.Value;
    row.Cells[1].Value = cell1.Value;
    table.Rows[oldIndex].Visible = false;
    table.Rows.RemoveAt(oldIndex);
    table.Rows[oldIndex].Selected = false;
    table.Rows[newIndex].Selected = true;
}
Run Code Online (Sandbox Code Playgroud)

在row table.Rows.Insert(newIndex,1)我收到以下错误:

System.Windows.Forms.dll中类型为"System.InvalidOperationException"的未处理异常

附加数据:操作无效,因为它导致对SetCurrentCellAddressCore函数的可重入调用.

当我在编辑当前单元格时单击另一个单元格时会发生这种情况.如何规避此类错误并正确插入行?

c# datagridview invalidoperationexception

6
推荐指数
1
解决办法
1万
查看次数

Toggleswitch需要明确的"Mode = Twoway"

今天我根据UI设计更改更新了Windows应用商店应用.其中一个变化是用a替换CheckBoxa ToggleSwitch.

所以代码是从更新

<CheckBox IsChecked="{Binding BooleanProperty}" ...
Run Code Online (Sandbox Code Playgroud)

<ToggleSwitch IsOn="{Binding BooleanProperty"} ... //does not update data source
Run Code Online (Sandbox Code Playgroud)

然后我注意到切换ToggleSwitch不会更新底层BooleanProperty,我必须添加Mode=TwoWay以使其工作.

<Toggleswitch IsOn="{Binding BooleanProperty, Mode=TwoWay"} ... //update data source
Run Code Online (Sandbox Code Playgroud)

根据我在WPF中学到的知识,我不必Mode=TwoWay在CheckBox的IsChecked属性上明确设置,因为它是TwoWay默认的.

通常,用户可编辑的控件属性(例如文本框和复选框的属性)默认为双向绑定,而大多数其他属性默认为单向绑定.

我一直在想的ToggleSwitch是另一个具有更好触摸支持的CheckBox,它仅适用于Windows应用商店和Windows Phone应用.

为什么ToggleSwitch.IsOn不默认为TwoWay绑定?CheckBox和ToggleSwitch之间是否还有其他差异?

c# data-binding wpf windows-store-apps toggleswitch

6
推荐指数
1
解决办法
2678
查看次数

StarUML类图:添加Guid []类型的属性

在StarUML 5.0中,我试图定义一个类型为Guid [](Guid Structure数组)的类.但是不允许输入"-guids:Guid []",因为StarUML会自动丢弃方括号.

我还没有尝试过其他建模工具......只想知道如何使用StarUML.

如果我提供数组的长度,StarUML似乎接受,比如"-guids:Guid [10]",但是在StarUML生成的代码中,这个字段就像是

private Guid guids; //the square brackets are missing;
Run Code Online (Sandbox Code Playgroud)

或者我可以在生成的代码中添加类似"-guids:Guid*"的星号,字段就是这样

private Guid* guids; 
Run Code Online (Sandbox Code Playgroud)

这不是我想要的,即使在C++中,指针和数组在概念上是可互换的.(我在C#编码)

class-diagram staruml

5
推荐指数
1
解决办法
1万
查看次数

cortana调用导致启动时崩溃

我有一个Windows Phone 8.1通用应用程序,我正在努力添加基本的Cortana支持.很多关于这个的文章都是针对Silverlight等的 - 我发现很难找到关于这个的真正好的信息.

到目前为止,如果应用已经运行或暂停,我有激活工作.但是,如果应用程序完全退出,则在激活时它会立即崩溃.我已经尝试过使用Hockey和一个简单的"LittleWatson"例程来捕捉崩溃,但似乎发生得太快就被抓住了.我已经看到一些引用私有测试版并试图获得崩溃转储,但到目前为止我没有任何运气.

这是我的激活码的样子app.xaml.cs:

    protected override void OnActivated(IActivatedEventArgs args) {
        base.OnActivated(args);
        ReceivedSpeechRecognitionResult = null;
        if (args.Kind == ActivationKind.VoiceCommand) {
            var commandArgs = args as VoiceCommandActivatedEventArgs;
            if (commandArgs != null) {
                ReceivedSpeechRecognitionResult = commandArgs.Result;
                var rootFrame = Window.Current.Content as Frame;
                if (rootFrame != null) {
                    rootFrame.Navigate(typeof(CheckCredentials), null);
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我检查命令结果:

    private async Task CheckForVoiceCommands() {
        await Task.Delay(1); // not sure why I need this
        var speechRecognitionResult = ((App)Application.Current).ReceivedSpeechRecognitionResult;
        if (speechRecognitionResult == null) {
            return; …
Run Code Online (Sandbox Code Playgroud)

c# windows-phone-8.1 win-universal-app cortana

5
推荐指数
1
解决办法
825
查看次数

在 UWP 中连接到 SignalR(核心)集线器时出现“证书颁发机构无效或不正确”

我正在尝试从我的 UWP 应用程序连接到 SignalR Core 集线器。

在 .NET Core 应用程序 (2.1) 中,它运行良好,而在 UWP 中,它在hub.StartAsync()被调用时抛出异常。

证书颁发机构无效或不正确

这是我的代码:

hub = new HubConnectionBuilder()
    .WithUrl("http://localhost:49791/hubs/status")
    .Build();

await hub.StartAsync();
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

我猜我必须在包清单中配置一些东西,但是什么?

.net signalr signalr-hub signalr.client uwp

5
推荐指数
2
解决办法
6702
查看次数