[C#] Ix.NET – 聚合

[C#] Ix.NET – 聚合

本篇介绍Ix.NET中的聚合函数。

Any

Any用于判断序列中是否存在元素或存在指定元素。接口如下:

public static Task<bool> Any<T>(this IAsyncEnumerable<T> source);
public static Task<bool> Any<T>(this IAsyncEnumerable<T> source, Func<T, bool> predicate);

第一个接口用于判断序列中是否存在元素,存在返回true,不存在返回false
第二个接口用于判断序列中是否存在指定元素,参数为判断函数,调用时会遍历序列,将序列值传给判断函数的参数,然后根据序列值返回是否满足条件,满足即返回true则停止遍历,接口返回true,不满足即返回false则继续遍历,遍历完成都不满足则接口返回false。用法如下: ···  阅读全文

[C#] Ix.NET – 创建IAsyncEnumerable

[C#] Ix.NET – 创建IAsyncEnumerable

前面介绍了Ix.NET的结构和遍历方法,这一篇介绍怎么创建IAsyncEnumerable

Range

创建一个指定范围int类型的IAsyncEnumerable。接口如下:

public static IAsyncEnumerable<int> Range(int start, int count);

第一个参数指定开始值,第二个参数指定创建序列中元素的数量。该函数生成一个从start开始,每次递增1,总共count个数的序列。
如前面创建的一个1-5的序列: ···  阅读全文

[WPF]换肤功能的实现

[WPF]换肤功能的实现

在WPF中有一个静态资源DynamicResource,我们可以用这个实现简单换肤功能。

首先,我们在想要改变皮肤样式的控件上用DynamicResource设置样式,例如:

<Image Style="{DynamicResource MainWindowLogo}"/>

然后,我们在不同的皮肤上定义不同的MainWindowLogo样式。
最后,当我们需要换肤时切换皮肤样式文件即可,切换代码如下: ···  阅读全文

[WPF]使用WinForm控件后无边框窗口实现

[WPF]使用WinForm控件后无边框窗口实现

有时需要在WPF程序中需要嵌入WinForm的控件,这时如果用WindowStyle="None"AllowsTransparency="True"Background="Transparent"设置无边框窗口就会发现不显示任何东西。这时就需要调用系统API来实现无边框窗口。

设置窗口无边框

设置无边框需要用SetWindowLong,代码如下:

private const int GWL_STYLE = -16;
private const int WS_CAPTION = 0X00C0000;

[DllImport("user32", EntryPoint = "SetWindowLong")]
private static extern int SetWindowLong(IntPtr hwnd, int nIndex, int dwNewLong);

/// <summary>
/// 设置窗口无边框
/// </summary>
/// <param name="window">要设置的窗口</param>
/// <param name="isNoBorder">是否为无边框窗口</param>
public static void SetWindowNoBorder(this Window window, bool isNoBorder)
{
    if (window == null) return;

    // 获取窗体句柄 
    var hwnd = new WindowInteropHelper(window).Handle;

    // 获得窗体的 样式 
    var oldstyle = GetWindowLong(hwnd, GWL_STYLE);

    if (isNoBorder)
        SetWindowLong(hwnd, GWL_STYLE, oldstyle & ~WS_CAPTION);
    else
        SetWindowLong(hwnd, GWL_STYLE, oldstyle | WS_CAPTION);
}

设置窗口背景透明

设置背景透明需要用SetLayeredWindowAttributes,代码如下: ···  阅读全文

[WPF]无边框可伸缩带阴影窗口

[WPF]无边框可伸缩带阴影窗口

用WPF做界面很多时候都需要无边框窗口,这时候可以用WindowStyle="None"AllowsTransparency="True"来实现无边框。然而这样设置后的视觉效果却不是很好,这时就需要用到WindowChrome。下面详细介绍一下WindowChrome

WindowChrome

MSDN中,有这样的描述:

若要自定义窗口,同时保留其标准功能,可以使用WindowChrome类。 WindowChrome类窗口框架的功能分离开来视觉对象,并允许您控制的客户端和应用程序窗口的非工作区之间的边界。  ···  阅读全文

FLV封装格式 – 在FLV解析出H.264裸码流

FLV封装格式 – 在FLV解析出H.264裸码流

前面在FLV封装格式中介绍了FLV的各部分组成。接下来需要将FLV中的H.264裸码解析出来,下面就H.264在FLV视频Tag中的存放结构做一下介绍。

关于FLV的Tag结构可以在FLV封装格式中了解。
Tag的第一个字节为0x09表示视频帧,接下来是Tag Header的其他信息,这里不再详细讲述。下面介绍一下H.264视频Tag的数据区。

第一个字节

H.264的编码ID为7,所以数据区第一个字节的低4位为7,高4位一般为1或2,表示关键帧或非关键帧。 ···  阅读全文