问题描述
namespace loadmultipleimages
{
public partial class Form1 : Form
{
VideoCapture capture = new VideoCapture();
delegate void delHugeTask();
public Form1()
{
InitializeComponent();
}
public static /*async*/ Task copyToAsync( this Stream input,Stream output,CancellationToken cancellationToken = default(CancellationToken))
{
return copyToAsyncTasks(input,output,cancellationToken).ToTask();
}
private IEnumerable<Task> copyToAsyncTasks(Stream input,CancellationToken cancellationToken)
{
byte[] buffer = new byte[0x1000]; // 4 KiB
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
var bytesReadTask = input.Read(buffer,buffer.Length);
yield return bytesReadTask;
if (bytesReadTask.Result == 0) break;
cancellationToken.ThrowIfCancellationRequested();
yield return output.Write(buffer,bytesReadTask.Result);
}
}
}
}
的Form 1下弹出并带有蓝色下划线
Error 1 Extension method must be defined in a non-generic static class
我知道如果你想使用静态方法,类也必须定义为静态。但是如何解决这个问题?
解决方法
最好的解决方案是将项目的目标框架更改为 4.8 之类的。我知道支持 .NET 4.0 的唯一原因是继续支持 Windows XP。在这种情况下,我建议您向做出该业务决策的人退缩:您是否绝对确定要支持 Microsoft 不支持的操作系统 超过 7 年?对我来说,这似乎有一些严重的责任问题。
但是,假设你无法说服你的老板支持一个古老的操作系统不是一个好主意,你可以使用 Microsoft.Bcl.Async
NuGet 包来让 async
/await
工作.请注意,这仅适用于桌面应用,不适用于 ASP.NET 应用。