Bitmap 参数无效,在线求!!!

chinahlm 2018-01-19 12:00:52


线程中使用,出错,求求求!!!!!
...全文
859 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinahlm 2018-02-28
  • 打赏
  • 举报
回复
应该是被释放造成的
chinahlm 2018-02-28
  • 打赏
  • 举报
回复
引用 18 楼 xinbada1985 的回复:
lock应该也是一个好的解决办法!还是应该是资源释放或者同一个对象多个线程使用的问题!
多线程肯定是有“同一个对象多个线程使用"的,就是这个问题,LOCK好像也没用
chinahlm 2018-02-28
  • 打赏
  • 举报
回复
引用 16 楼 xinbada1985 的回复:
[quote=引用 14 楼 chinahlm 的回复:] 和诸位分享目前的结果: 在主线程上使用 this._bitmap = (System.Drawing.Bitmap)e.Bitmap.Clone(); 目前测试10分钟不在出现"参数无效。"或“对象当前正在其他地方使用。” 估计出现这个问题和线程间的内存复制有关系,但是这个问题不常出现,几秒出一次。所以视乎又不是这个问题。 目前,问题暂时解决,原因不明。
我给你了第2个写法啊! Dispatcher.Invoke(new Action(() => { })); 在线程内需要加这个的 [/quote] 并没有操作控件,所以,没使用这个
正怒月神 2018-01-23
  • 打赏
  • 举报
回复
我觉得还是lock的问题。
xinbada1985 2018-01-23
  • 打赏
  • 举报
回复
引用 14 楼 chinahlm 的回复:
和诸位分享目前的结果: 在主线程上使用 this._bitmap = (System.Drawing.Bitmap)e.Bitmap.Clone(); 目前测试10分钟不在出现"参数无效。"或“对象当前正在其他地方使用。” 估计出现这个问题和线程间的内存复制有关系,但是这个问题不常出现,几秒出一次。所以视乎又不是这个问题。 目前,问题暂时解决,原因不明。
我给你了第2个写法啊! Dispatcher.Invoke(new Action(() => { })); 在线程内需要加这个的
xinbada1985 2018-01-23
  • 打赏
  • 举报
回复
lock应该也是一个好的解决办法!还是应该是资源释放或者同一个对象多个线程使用的问题!
qq_21599783 2018-01-21
  • 打赏
  • 举报
回复
变色龙】支持 10.12 的 Chameleon_2.3_r2839 Enoch Mac版 + EFI_Tools + Win版 电梯直达 跳转到指定楼层 crazybirdy 退隐江湖不问事 UID 83523 帖子 7140 PB币 11816 贡献 7 技术 5481 活跃 2239 . 楼主 发表
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
查了一下 public Bitmap Clone(Rectangle rect, PixelFormat format); public Bitmap Clone(RectangleF rect, PixelFormat format); 并无无参数的 Clone 方法 其实你直接 Bitmap b = new Bitmap(this._bitmap); 不就简单明了了吗?
chinahlm 2018-01-19
  • 打赏
  • 举报
回复
lock(this._bitmap) { } 用过了
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
lock
chinahlm 2018-01-19
  • 打赏
  • 举报
回复
50分在线求
chinahlm 2018-01-19
  • 打赏
  • 举报
回复
和诸位分享目前的结果: 在主线程上使用 this._bitmap = (System.Drawing.Bitmap)e.Bitmap.Clone(); 目前测试10分钟不在出现"参数无效。"或“对象当前正在其他地方使用。” 估计出现这个问题和线程间的内存复制有关系,但是这个问题不常出现,几秒出一次。所以视乎又不是这个问题。 目前,问题暂时解决,原因不明。
chinahlm 2018-01-19
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
_bitmap 坏了?
版主,在这个线程里不是一直不好使,偶尔一个偶尔一个
chinahlm 2018-01-19
  • 打赏
  • 举报
回复
引用 9 楼 xinbada1985 的回复:
System.Drawing.Bitmap bitmapRGB24 = new System.Drawing.Bitmap((System.Drawing.Bitmap)this.synFile.PlayControl.CurrentBitmap.Clone(), (int)this.imageWithDrawLine.MainImage.ActualWidth, (int)this.imageWithDrawLine.MainImage.ActualHeight); 这种写法试验一下
试过了也不行
xinbada1985 2018-01-19
  • 打赏
  • 举报
回复
因为在线程内加一下UI刷新线程试试 Dispatcher.Invoke(new Action(() => { System.Drawing.Bitmap bitmapRGB24 = new System.Drawing.Bitmap((System.Drawing.Bitmap)this.synFile.PlayControl.CurrentBitmap.Clone(), (int)this.imageWithDrawLine.MainImage.ActualWidth,(int)this.imageWithDrawLine.MainImage.ActualHeight); })); 这样在试试
xuzuning 2018-01-19
  • 打赏
  • 举报
回复
_bitmap 坏了?
xinbada1985 2018-01-19
  • 打赏
  • 举报
回复
System.Drawing.Bitmap bitmapRGB24 = new System.Drawing.Bitmap((System.Drawing.Bitmap)this.synFile.PlayControl.CurrentBitmap.Clone(), (int)this.imageWithDrawLine.MainImage.ActualWidth, (int)this.imageWithDrawLine.MainImage.ActualHeight); 这种写法试验一下
chinahlm 2018-01-19
  • 打赏
  • 举报
回复
Clone() 创建此 Image 的一个精确副本。(继承自 Image。) Clone(Rectangle, PixelFormat) 创建此分区的副本 Bitmap 由定义 Rectangle 结构并使用指定 PixelFormat 枚举。 Clone(RectangleF, PixelFormat) 创建此分区的副本 Bitmap 定义与指定 PixelFormat 枚举。 版主有的,https://msdn.microsoft.com/zh-cn/library/system.drawing.bitmap.clone(v=vs.110).aspx

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧