首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

WPF 已知问题 BitmapDecoder.Create 不支持传入 Asynchronous 的文件流

这是在 GitHub 上有小伙伴报的问题,在 WPF 中,不支持调用 BitmapDecoder.Create 方法,传入的 FileStream 是配置了 FileOptions.Asynchronous...· Issue #4355 · dotnet/wpf 现象是传入 BitmapDecoder.Create 的 FileStream 配置了 FileOptions.Asynchronous 选项,代码如下...参数,将会在 Windows 下,调用的是 CreateFileW function (fileapi.h) - Win32 apps 方法,在这个方法里面将会设置 FILE_FLAG_OVERLAPPED...的创建参数里面加上了 FileOptions.Asynchronous 那么将会在 CreateDecoderFromFileHandle 抛出错误 因此在 WPF 中,调用 BitmapDecoder.Create...方法,传入的带 FileOptions.Asynchronous 的 FileStream 抛出错误,不是 WPF 层的锅,而是 WIC 层不支持。

54730
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    dotnet 使用 FileAccess 与 OpenOrCreate 对文件访问权限的影响

    FileStream 创建的封装,在 FileStream 的构造函数有大量的参数,而对文件权限有影响的是 FileMode 和 FileAccess 和 FileShare 三个 通过 FileMode...可以指定是如何创建这个 FileStream 的,包括是创建还是打开等含义的枚举,细节请看 VS 上的注释。...而在 FileMode 枚举的一些参数是和 FileAccess 有关联的,例如调用 Create 时就需要有 Write 的 FileAccess 权限,如果不匹配,那么无论是传入哪个文件路径都会在构造...FileStream 的参数测试时抛出错误 其实在进行无写权限的文件访问时,设置的 FileAccess 才是决定是否会抛出异常的参数。...,从逻辑上是等价的,但是实际传入参数不是完全等价 var fileStream = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Read

    73010

    异步陷阱之IO篇

    ,有这么把一个文件重复导入10次的实际场景吗?...看来前面的分析是对的,文件在特定 情况不可用,但是为什么不可用呢?从上面的IO异常信息可以看出,这个文件是ASP.NET临时保存的上传文件。...;焦点转到最后一句返回一个可写的FileStream,注意这里的第三个参数是FileOptions.Asynchronous,就是说,这个FileStream实际是异步IO,但是内部处理逻辑没有等待这个结果就直接走后续的逻辑了...以上分析了问题,但如何解决呢(某PM话外音:那谁谁,快点啊,客户催着呢),很简单,去除调这个异步IO就可以了,好吧,代码一点也不简单,重写这个GetStream方法,保证获取的FileStream使用同步...参考示例工程代码:下载地址 更新补充:在ASP.NET MVC 5中重写了ReadAsMultipartAsync所在的整个类,已经修复了这个问题(至少我试过同时1000次毫无压力),参考示例中AsyncIoTrap_v5

    1.2K70

    C#异步使用要点(翻译)

    由于在.NET中取消操作必须显示的传递CancellationToken,所以如果想取消所有调用的异步函数,那么应该将CancllationToken传递给此调用链中的所有函数 下面例子在调用ReadAsync...参数指定异步通信 using(Stream stream = new FileStream( @"d:\资料\Blogs\Task\TaskTest",...async void 假如有BackgroudQueue类中有一个接收回调函数的FireAndForget方法,该方法在某个时候执行调用 下面这个错误例子将强制调用者要么阻塞要么使用async void...{ public AsyncLazy(Func> valueFactory) : base(valueFactory) { } } 4.构造函数对于异步的问题...构造函数是同步,下面看看在构造函数中处理异步情况 下面是使用客户端API的例子,当然,在使用API之前需要异步进行连接 public interface IRemoteConnectionFactory

    3.4K50

    使用异步操作时的注意要点(翻译)

    由于在.NET中取消操作必须显示的传递CancellationToken,所以如果想取消所有调用的异步函数,那么应该将CancllationToken传递给此调用链中的所有函数 ❌下面例子在调用ReadAsync...参数指定异步通信 using(Stream stream = new FileStream( @"d:\资料\Blogs\Task\TaskTest",...在使用异步IO时,应该将options参数设置为FileOptions.Asynchronous,否则会产生额外的线程浪费,详细信息请参考CLR中28.12节 9.建议取消那些不会自动取消的操作(CancellationTokenRegistry...void 假如有BackgroudQueue类中有一个接收回调函数的FireAndForget方法,该方法在某个时候执行调用 ❌下面这个错误例子将强制调用者要么阻塞要么使用async void异步方法...构造函数是同步,下面看看在构造函数中处理异步情况 下面是使用客户端API的例子,当然,在使用API之前需要异步进行连接 public interface IRemoteConnectionFactory

    4.6K20

    C# 温故而知新:Stream篇(四)上

    FileStream的重要性 FileStream常用构造函数(重要) 非托管参数SafeFileHandle简单介绍 FileStream常用属性介绍 FileStream常用方法介绍 FileStream...(大家别误解,文件流无法直接通过网络进行传输,而是 通过网络流将客户端上传的文件传到服务器端接收,然后通过文件流进行处理,下载正好相反) FileStream 常用构造函数介绍(可能理解上有点复杂,请大家务必深刻理解..., Int32, FileOptions) FileOptions:这是类似于FileStream对于文件操作的高级选项 FileStream 常用属性介绍 *1:CanRead :指示FileStream...只读属性 *5:ReadTimeout :设置读取超时时间 *6:SafeFileHandle : 文件安全句柄 只读属性 *7:position:当前FileStream所在的流位置 FileStream...方法用来同步或异步的实现添加文件,FileStream会根据配置类去选择相应的构造函数,实现异步或同步的添加方式 /// /// 添加文件方法 ///

    1.3K50

    C# 文件读写系列三

    但是FileStream也有它自己的优势,FileStream可以指定FileMode、FileAccess、FileShare、FileOptions等各种控制,扩大了文件读写的灵活性,FileStream...等参数,因为StreamReader只能进行读取操作.StreamReader的构造函数参数主要有以下两个: (1)、指定文件的编码方式,通过Encoding类 (2)、在没有提供要读取的文件名的情况下...和StreamReader一样,相比FileStream构造一个StreamWriter要容易的多,不需要FileMode、FileAccess、FileShare等参数....主要的构造参数和StreamReader一样,一个Encoding和一个Stream实例.下面主要介绍StreamWriter的构造函数. (1)、StreamWriter构造函数....参数换成true,输出就为true,自行验证. 也就是说,当前leaveOpen参数设置true时,当释放了sw,fs仍然可以方法,反之,则不能访问,因为在释放sw的同时,fs也被关闭了.

    1.8K100

    《CLR via C#》笔记:第5部分 线程处理(2)

    调用FileStream 的 Read方法时,你的线程从托管代码转变为本机/用户模式代码, Read内部调用Win32 ReadFile 函数(①)。...打开磁盘文件的方式仍然是通过构造一个FileStream对象,但现在传递了一个FileOptions.Asynchronous标志,告诉Windows我希望文件的读/写操作以异步方式执行。...另外,构造器、属性访问器方法和事件访问器方法不能转变成异步函数。 2、异步函数不能使用任何out或ref参数。 3、不能在 catch,finally 或unsafe块中使用await操作符。...编译器如何将异步函数转换成状态机 不要让线程等待一个线程同步构造从而造成线程的阻塞。...但异步函数是可以返回void 的。实现异步事件处理程序时,C#编译器允许你利用这个特殊情况简化编码。

    1.1K40

    FileStream 总结

    (大家别误解,文件流无法直接通过网络进行传输,而是 通过网络流将客户端上传的文件传到服务器端接收,然后通过文件流进行处理,下载正好相反) FileStream 常用构造函数介绍(可能理解上有点复杂,请大家务必深刻理解..., Int32, FileOptions) FileOptions:这是类似于FileStream对于文件操作的高级选项 FileStream 常用属性介绍 *1:CanRead :指示FileStream...只读属性 *5:ReadTimeout :设置读取超时时间 *6:SafeFileHandle : 文件安全句柄 只读属性 *7:position:当前FileStream所在的流位置 FileStream...方法用来同步或异步的实现添加文件,FileStream会根据配置类去选择相应的构造函数,实现异步或同步的添加方式 /// /// 添加文件方法...,能够提升上传性能和速度 本章总结 本章介绍了Stream中最关键的派生类FileStream的概念,属性,方法,构造函数等重要的概念,包括一些难点和重要点都一一列举出来,最后2

    61410

    深入.NET平台和C#编程

    (1)构造函数的使用 (2)this关键字 使用构造方法请注意以下几个问题: 一个类的构造函数名通常与类名相同 构造函数没有返回值 一般情况下,构造函数总是public类型的 在构造函数中不要对类的示例做初始化以外的事情...要从字符串转换,需要使用Enum.Parse(),这个方法第一个参数是关键字typeof后跟放在括号中的枚举类型, 第二个参数是要转换的字符串。...类 结构 引用类型 值类型 可以被继承 不能被继承 可以有默认构造函数 不可以有默认构造函数 可以添加无参的构造函数 可以添加构造函数,但它们必需带参数 创建对象必需使用...b.编写子类构造函数的注意事项 (1)隐式调用父类的构造函数 (2)显式调用父类的构造函数 c.继承的价值 (1)继承模拟了显示世界的关系,OOP中强调一切皆对象,符合我们的面向对象思维。...c.综合实战 RSS阅读器 详细情看P219页 8-3:接口的典型应用 a.接口作为参数的意义 接口作为参数传递时,实际上要传递的就是实现这个接口的对象。

    1.9K10

    C# 文件读写系列二

    ,而Stream类操作的是字符数据. (2)、FileStream的构造方式 虽然.Net 提供了15种方式构建一个FileStream对象实例,但是构建一个FileStream对象实例,主要需要以下4...条信息(也就是构造函数的参数): a、要访问的文件 b、表示如何打开文件的模式。....Net提供的FileStream构造函数主要分为两类 一类是构造函数的第一个参数是一个文件的完整路径的字符串,其余的参数大致是FileMode、FileAcess、FileShare等......一类是构造函数用老式的windows-api分格的windows句柄来处理文件... 本文主要用的是第一类,第一个参数是文件的完整路径的字符串的这一类的构造函数,构造形式如下: ?...接下来主要介绍如上构造函数中的三个参数:FileMode、FileAcess、FileShare a、FileAccess枚举 ?

    1.3K90

    ringbuffer 无锁队列_wear ring

    要保存多次操作的内容就要有一个类似“队列”的东西来保存,而一般的线程安全的队列,都是“有锁队列”,在性能要求很高的系统中,不希望在日志记录这个地方耗费多一点计算资源,所以最好有一个“无锁队列”,因此最佳方案就是...,然后调用函数 FlushFile 将Ring Buffer的数据连接起来,整体写入文件。...void FlushFile(string fileName, stringtext) {using (FileStream fs = new FileStream(fileName, FileMode.Append...FlushFile 中我们使用了异步写入文件的技术,注意 FileOptions.Asynchronous ,使用它才可以真正利用Windows的完成端口IOCP,将文件异步写入。...当然这段代码也可以使用.NET最新版本支持的 async/await ,不过我要让SOD框架继续支持.NET 2.0,所以只好这样写了。

    56830

    asp dotnet core 支持客户端上传文件

    ,一个是 File 文件,另一个是文件校验,这个类可以随意命名,属性也可以随意命名,只要在客户端可以相同 打开一个 controller 添加一个新的函数 [HttpPost("UploadPackage...在函数传入的参数使用 [FromForm]KanajeaLolowge file 的意思是通过 Post 提交 Form 的方法拿到参数 所以在客户端通过 Form 提交包含 File 和 Sha 信息的...Form 就可以通过链接调用这个方法 请看在客户端如何写 假设已经拿到文件的 FileStream 和计算出文件的 Sha 拿到链接 private static async Task...Upload(FileStream fileStream, string sha, string url) 在这个方法上传文件,通过 MultipartFormDataContent 构造一个 Form...; } return BadRequest(); } 如果需要将文件保存在 ContentRoot 可以通过在 controller 的构造函数添加

    6.4K20

    asp dotnet core 支持客户端上传文件

    ,一个是 File 文件,另一个是文件校验,这个类可以随意命名,属性也可以随意命名,只要在客户端可以相同 打开一个 controller 添加一个新的函数 [HttpPost("UploadPackage...在函数传入的参数使用 [FromForm]KanajeaLolowge file 的意思是通过 Post 提交 Form 的方法拿到参数 所以在客户端通过 Form 提交包含 File 和 Sha 信息的...Form 就可以通过链接调用这个方法 请看在客户端如何写 假设已经拿到文件的 FileStream 和计算出文件的 Sha 拿到链接 private static async Task...Upload(FileStream fileStream, string sha, string url) 在这个方法上传文件,通过 MultipartFormDataContent 构造一个 Form...; } return BadRequest(); } 如果需要将文件保存在 ContentRoot 可以通过在 controller 的构造函数添加

    5.2K20

    .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)

    提供了多种不同的文件打开方式,这些方式大多数与 Windows 文件 API 中的模式是对应的,但也有一些 .NET 层面的判断以及名称的变化。...在 .NET 层你可以选择适合你业务场景需要的文件打开方式。...---- 文件打开方式 文件打开的多个重载方法中,除了封装好的 OpenRead / OpenWrite 之外,其他都是需要指定 FileMode 参数的。...注意,在 File.Open 方法中传入以下这些参数的含义描述中可能有一些包含过程和判断的语句,但实际上这些真正的判断和过程发生在 Windows 内核(虽然 .NET 也有一些判断,但是一些参数预判断和参数转换...附源码 以下是 FileStream 中的 Open 方法最终调用处。

    1.6K10

    使用Ring Buffer构建高性能的文件写入程序

    要保存多次操作的内容就要有一个类似“队列”的东西来保存,而一般的线程安全的队列,都是“有锁队列”,在性能要求很高的系统中,不希望在日志记录这个地方耗费多一点计算资源,所以最好有一个“无锁队列”,因此最佳方案就是...,然后调用函数 FlushFile 将Ring Buffer的数据连接起来,整体写入文件。...void FlushFile(string fileName, string text) { using (FileStream fs = new FileStream...FlushFile 中我们使用了异步写入文件的技术,注意 FileOptions.Asynchronous ,使用它才可以真正利用Windows的完成端口IOCP,将文件异步写入。...当然这段代码也可以使用.NET最新版本支持的 async/await ,不过我要让SOD框架继续支持.NET 2.0,所以只好这样写了。

    2.8K60
    领券