分类 C# 下的文章

C#延迟一个Task的执行

网友Bruno Lopes咨询:

我想实现一个可以在延迟 Xms 后执行一个 task 的需求,并要求能够实现在 xms 之前取消 task 的执行,我的参考代码如下:

var _cancelationTokenSource = new CancellationTokenSource();

var token = _cancelationTokenSource.Token;
Task.Factory.StartNew(() =>
    {
        token.ThrowIfCancellationRequested();
        Thread.Sleep(100);
        token.ThrowIfCancellationRequested();
    }).ContinueWith(t =>
    {
        token.ThrowIfCancellationRequested();
        DoWork();
        token.ThrowIfCancellationRequested();
    }, token);

阅读剩余部分

C#中让Timer在特定时间点触发

网友Behrooz Karjoo咨询:

我的应用程序需要做一个 事件触发 的功能,它需要每天定时执行,比如说当天的 16点,我现在的做法是使用一个 timer 按秒轮询判断当前是否为 16:00, 虽然可以玩得转,但我想能不能实现那种 16:00 自动触发回调函数的模式,而不是现在无时无刻的轮询。

网友noontz回答:

其实很简单,计算触发时间与当前时间的差值,然后将 差值 作为精确的延迟时间,带入到 Task.Delay 中即可,外面再套个 while(true) ,下面是我封装的代码。

阅读剩余部分

C#设置鼠标光标为自定义图片

这个功能,大家平常在网页上看到的比较多,经常是打开某个网址,鼠标或者点击效果会变成比较绚丽的那种,在winform上估计就很少有人去使用(其实也没什么用- -,只是自娱自乐看下效果而已);

如果不加什么特效的话,winform上实现起来真的是超级简单。这就得益于C#强大的API了。

首先需要保证我们的图片是icon格式,这个可以直接在线转换,网上随便一百度就行了。

实现功能:

Winform设置鼠标光标为自定义图片

阅读剩余部分

C#压缩和解压字符串的方法

嗯,就是将比较大的字符串进行压缩,使其占用空间小一点,一般用在有时候接口间需要传输大量数据的时候(json数据较大或者含有base64),缩小体积以加快传输小效率。

实现功能:

压缩和解压字符串

开发环境:

开发工具:Visual Studio 2013

.NET Framework版本:4.5

阅读剩余部分

C# 中的异步流

在阅读本文前,建议先阅读本系列的上一篇文章『理解 yield 关键字』。我们知道,使用 C# 的 yield 关键字可以实现一个迭代器(Iterator),使用 async/await 关键字可以实现一个异步方法。异步流(Asynchronous Stream)就是这两种功能的结合体,它实现了以异步的方式生成和消费一组数据系列的迭代器。

异步流的支持主要建立在 C# 8 引入的两个接口上:

public interface IAsyncEnumerable<out T>
{
    IAsyncEnumerator<T> GetAsyncEnumerator (...);
}
public interface IAsyncEnumerator<out T>: IAsyncDisposable
{
    T Current { get; }
    ValueTask<bool> MoveNextAsync();
}

阅读剩余部分