图片整理器 0.2 遇到的问题

由于改用了 WPF,很多东西和 WinForm 下都不一样,当然,UI 方面用熟悉了就再也不想回到 WinForm 了。一个小技巧,需要自动改变大小的元素都放在<Viewbox>里面,很方便。

UI 是简单、高效了,但是多线程的问题一直困扰着我。这个版本也用了 Backgroundworker (不是最好,但是最熟悉、感觉最方便),中断异步线程始终不成功,查阅 MSDN 上的说明也没用。搜索了好几天解决方法,最后才知道仅仅设置 WorkerSupportsCancellation 为 true,调用 BackgroundWorker.CancelAsync() 是没有用的,还需要在 Backgroundworker 里的 Dowork 事件里需要中断的地方用 if(bgwRatioRange.CancellationPending)  “获取”取消命令,如果有,则用 e.Cancel = true 中断线程。.CancelAsync() 只是发送一个取消命令而已啊。。。要命的是,MSDN 上面关于这个方法的示例代码也只是这样写的,很容易误导像我这样的初学者,在 stackoverflow 上有回答这方面问题的人也说 MSDN 上的例子是 silly 的。最后,不是 Dowork 里面所有的循环都需要加入中断进程判断,放在一些比较耗时的 foreach 循环里比较好。

发表评论

电子邮件地址不会被公开。 必填项已用*标注