小编Jon*_*dén的帖子

AsyncCallBack异步完成

我最近注意到了以下模式,但我并没有完全掌握CompletedSynchronously属性的用法:

IAsyncResult channelOpenResult = channel.BeginOpen(new AsyncCallback(OnOpenCompleteChannel), channel);
if (channelOpenResult.CompletedSynchronously)  
{  
    CompleteOpenChannel(channelOpenResult);  
}
Run Code Online (Sandbox Code Playgroud)

然后,在回调中:

void OnOpenCompleteChannel(IAsyncResult result)  
{  
    if (result.CompletedSynchronously)  
        return;  
    else  
        CompleteOpenChannel(result);  
}
Run Code Online (Sandbox Code Playgroud)

代码中的某个地方当然有一个功能:

void CompleteOpenChannel(IAsyncResult result) ...
Run Code Online (Sandbox Code Playgroud)

这是一种处理异步调用的方式,具体取决于它是否直接完成?但是为什么在这种情况下使用它,因为始终会调用AsyncCallback(它会吗?)?有人可以给出一个同步调用的例子吗?

.net c# silverlight web-services

15
推荐指数
1
解决办法
6878
查看次数

铸造枚举到uint

我正在编写一个函数来接受Enum并强制转换它uint.从我在铸造时所看到的int,你必须首先将它投射到一个物体:(int) (object) myEnumValue.如果你写,(int) myEnumValue你得到一个编译时异常.

现在,当我试图把它投入uint时,我期待那(uint) (object) myEnumValue会没事的.它编译得很好,但是在运行时会生成一个InvalidCastException.为了让它发挥作用,我已经习惯了

(uint) (int) (object) myEnumValue
Run Code Online (Sandbox Code Playgroud)

我觉得它看起来很有趣,所以我很开心,但为什么会这样呢?

也许这本来是更正确的问,为什么它是不可能投objectuint,但我很感兴趣,是否有另一种方式从去Enumuint.在那儿?

编辑:

上下文是一个函数,如下所示:

public static uint ToUInt (Enum e)
{
    return (uint) (int) (object) e;
}
Run Code Online (Sandbox Code Playgroud)

编辑2:

最好的解决方案是thecoop提到的:

Convert.ToUInt32(e)
Run Code Online (Sandbox Code Playgroud)

c# enums

7
推荐指数
2
解决办法
8654
查看次数

标签 统计

c# ×2

.net ×1

enums ×1

silverlight ×1

web-services ×1