繁体   English   中英

如何在 c# 中使用异步?

[英]How do I use Async in c#?

我正在做 c # 表格申请。 该应用程序基本上是一个视频转换器实现。 我有两个按钮,称为转换和转换停止。 这就是我想做的; 我不希望表单自行锁定,即使我单击其中任何一个。 届时我可能会取消该过程或关闭表格。 我需要做异步,但我不知道怎么做。 我不能使用后台工作人员,因为我基本上是在处理大数据。 他可以更多地锁定表格。 请帮忙。

转换停止代码;

private void Button7_Click(object sender, EventArgs e)
    {
        var ffmpeg = new NReco.VideoConverter.FFMpegConverter();
        ffmpeg.Stop();
                MessageBox.Show("convert is stopped");
    }

像这样:

private async void Button7_Click(object sender, EventArgs e)
{
    await Task.Run(() => 
    {
        //code here that takes a long time. NB nothing that must be run on the main thread
        var ffmpeg = new NReco.VideoConverter.FFMpegConverter();
        ffmpeg.Stop();
    });
    //when the above task completes this will then be called on the original thread context (i.e. the main ui thread)
    MessageBox.Show("convert is stopped");
}

请注意,MessageBox.Show 将在任务完成后调用,但控件将在等待调用时返回主线程。 这就是让刚接触异步的人感到困惑的地方。

另请注意,通常异步 function 将具有TaskTask<T>返回类型,但由于这是一个事件处理程序,它具有 void 返回类型。 这是 void 返回类型对于异步 function 正确的少数情况之一。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM