今天在一个群里,遇到一个别人问的问题,代码如下所示,项目本意是想在窗体加载时显示一张图片,然后点击按钮,删除该图片。
可是如下代码,在点击delete按钮时,项目报异常:“...无法删除,文件正在被另一个进程使用”,
xaml 代码:
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Button Grid.Row="1" Click="Button_Click" Content="Delete" Margin="212,16,183,58" />
</Grid>
C#代码
public partial class MainWindow : Window
{
string filePath = @"D:\11.图片\6.jpg";
Image image;
BitmapImage bitmapImage;
public MainWindow()
{
InitializeComponent();
image=new Image();
bitmapImage = new BitmapImage(new Uri(filePath, UriKind.Absolute));
image.Source=bitmapImage;
this.LayoutRoot.Children.Add(image);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.LayoutRoot.Children.Remove(image);
File.Delete(filePath); //这里出现异常
}
}
查了一些资料,这个异常的根本原因是因为BitmapImage没有Dispose()方法,系统虽然删除了image,但是图片文件仍然被当前进程占用着。
于是,将源代码修改如下解决(不再给BitmapImage直赋filePath,而是先根据filePath读取图片的二进制格式,赋给BitmapImage的Source,这样就可以在图片读取完毕后关闭流)。
解决后的代码如下:
public partial class MainWindow : Window
{
string filePath = @"D:\11.图片\6.jpg";
BitmapImage bitmapImage;
Image image;
public MainWindow()
{
InitializeComponent();
this.InitImage();
}
private void InitImage()
{
using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
{
FileInfo fi = new FileInfo(filePath);
byte[] bytes = reader.ReadBytes((int)fi.Length);
reader.Close();
image = new Image();
bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.StreamSource = new MemoryStream(bytes);
bitmapImage.EndInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
image.Source = bitmapImage;
this.LayoutRoot.Children.Add(image);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
this.LayoutRoot.Children.Remove(image);
File.Delete(filePath);
}
}
All-In-One Code Framework Sample Browser v2 Ctp Version 现在发布了,
欢迎大家下载测试、使用。
当然,还有很多地方需要改进,我们会在下一个版本进行改进。
下载地址:http://1code.codeplex.com/releases/view/60475
2010 对一站式示例代码库,对奋战在一站式示例代码库上的每一位工程师来说都是不同寻常的一年。 在我们共同努力和开发社区的支持下,该项目从一年前的草根雏形,成长为CodePlex排名前三,含有500多代码示例的“微软示例代码库”。 在此辞旧迎新之际,项目组感谢开源社区及开发者社区伴随我们一路走过来。2011年,我们会做得更好,以回馈社区,回馈广大开发者。
回顾2010
1) 215 新示例,300K 下载量,CodePlex 前三
2010 年,我们总共发布了215个新示例,总代码示例数过500。可以在http://1code.codeplex.com/ 下载到,或通过浏览示例代码索引下载单个示例包。
300K的下载量,在CodePlex上挤入下载量前三。每月新示例发布介绍索引:
· 微软一站式示例代码库 2010年12月更新
· 一站式示例代码库2010年11月5日更新
· 微软一站式示例代码库2010-10-10 新增代码示例简介
· 微软一站式示例代码库2010-09-06 新增代码示例简介
· 微软一站式示例代码库 2010-05-31 新增代码示例简介
· 微软一站式示例代码库 2010-04-30 新增代码示例简介
· 微软一站式示例代码库 2010-03-29 新增代码示例简介
· 微软一站式示例代码库 2010-02-28 新增代码示例简介
· 微软一站式示例代码库 2010-01-25 新增代码示例简介
2) 6月launch 一站式示例代码本地化工作。82 示例已被译成中文
为了方便中国开发者阅读示例代码和相关文档,我们从6月开始启动了一站式示例代码本地化工作。翻译内容包括示例文档(ReadMe.txt),代码注释以及UI界面。目前已完成对82个示例的翻译工作。你可以在http://1codechs.codeplex.com/ 下载到。每月新翻译示例发布介绍索引:
· 中文版All-In-One Code Framework发布
· All-In-One Code Framework *中文版* 2010年8月更新
· 一站式示例代码库 中文版 2010年9月更新
· 一站式示例代码库 中文版 2010年10月更新
· 微软一站式示例代码库(中文版)2010年12月10日更新
3) 示例代码浏览器 第一版 6月发布
下载地址: http://1code.codeplex.com/wikipage?title=All-In-One%20Code%20Framework%20Sample%20Browser&referringTitle=Documentation
由我们项目组里的一位WPF牛人开发,该浏览器可以方便你对微软一站式示例代码库中500多个示例的浏览。虽然在此次发布中我们仅提供了示例搜索功能,更多特性如自动更新、示例反馈等在不久就会陆续推出。

4) 全新示例代码请求服务正式上线
http://www.cnblogs.com/Jialiang/archive/2010/10/28/MSSampleRequestService.html
您还在为找不到所需的示例代码而苦恼吗?当您遇到困难的时候,您是否曾希望有人免费地为您量身提供示例代码?微软一站式示例代码库项目组宣布了一个全新而且免费的示例代码请求服务。希望能通过这个服务为广大的开发者分忧解难。

5) VC++, VC#, VB.NET 编码规范 (微软一站式示例代码库)
经过三个月的不懈努力和反复检查,我们项目组终于完成了一份80页的VC++, VC#, VB.NET 编码规范。所有一站式示例代码库里的示例代码将以此为标准进行编写。我也希望这份编码规范能或多或少帮助到博客园里的朋友们编写更加优质统一的代码。
中文版下载:http://1codechs.codeplex.com/releases/view/57277#DownloadId=185279
英文版下载:http://1code.codeplex.com/releases/view/57459#DownloadId=185535
6) 一站式示例代码库登陆微软中国首页
http://www.cnblogs.com/Jialiang/archive/2010/09/17/MSChina.html

7) 一站式示例代码库 MSDN 官方论坛11月开通
http://social.msdn.microsoft.com/Forums/zh-CN/codezhchs/threads
展望2011
1) Sample Browser 第二、三版
我们将大幅提升Sample Browser的搜索功能和性能。同时向client/server架构转变 - 即用户无需下载整个40多MB的示例代码包到本地。示例代码将被host在一个code sample server上。客户端是灵活的。可以是一个Sample Browser的程序,或一个Visual Studio的插件(允许你直接在Visual Studio里面搜索示例),或一个web search portal,等等。这些客户端允许你及时搜索,并按需下载示例代码。
2) 更完善的示例代码请求服务
示例代码请求服务自启动至今已有两个月。我们收到了近百条示例代码请求 - 远远超过了我们的预期。我们会优化我们的服务流程,增加人力,以尽快在一个月内完成每一个示例请求。
3) 更多的开发社区互动
我们在争取让开发社区更多地参与到这个开源的项目中来。和我们一起编写或review示例代码来帮助全球的开发人员。
当然一套奖励机制也会应运而生,以奖励社区贡献者。
4) Windows Phone 7, SharePoint, SQL Server, WCF, WF 示例
目前示例代码库中Windows Phone 7, SharePoint, SQL Server, WCF, WF的示例代码很少。2011年,我们会把这些技术作为重点之一。
5) 100万下载量大关,CodePlex排名第一
我们今年一大目标是100万下载量 + CodePlex排名第一。我们会以竭诚的服务和优质的示例代码赢得您下载并使用我们的示例代码。
最后,再次感谢开发社区和开源社区。正是因为你们的支持,2010年的一站式示例代码库才会变得精彩。祝新年快乐,合家安康。
摘要: Lucene.net 官方网站http://lucene.apache.org/lucene.net/Lucene.net 2.9.2 下载地址Lucene.Net_2_9_2/
阅读全文
摘要: 1.对自己好点,因为一辈子不长;对身边的人好点,因为下辈子不一定能够遇见!3. 如果你知道去哪﹐全世界都會為你讓路。4.我喜欢你,很久了,等你,也很久了, 现在,我要离开,比很久很久还要久......5. 纯,属虚构 。乱,是佳人。6.一个人只有一个心脏,却有两个心房。一个住着快乐;一个住着悲伤。不要笑得太大声,不然会吵醒旁边的悲伤。7.世界上最远的距离 不是树与树的距离 而是同根生长的树枝 却无法在风中相依8.苹果最光辉的一刻就是砸在牛顿头上!9.爱情使人忘记时间,时间也使人忘记爱情。10.分手就是不爱了,那些冠冕堂皇的理由,不是想让对方好过,而是想让自己好过点!12.不要让太多昨天占据你的
阅读全文
摘要: 1.无论对方说什么,你都回答:你牙齿里有根青菜!如果对方说:胡说,我今天没吃青菜!你就惊讶地说:原来是昨天的!以此类推。。。。。。。2.还是刚才的话题。如果别人这样说你,可以说:你想吃吗?我可以抠给你!(就是有点恶心!)3.对方骂你:(各种骂人的脏话)!你要回答:你在做自我介绍吗?4.对方说:巴黎圣母院缺个敲钟的,你去吧!直觉得回答:怎么,你从那辞职了?(要有文化的说)5.有一次看到两个人吵架,甲比乙矮,但乙比甲胖。甲骂道:你这个死胖子!乙气定神闲地说:胖是一时的事,矮是一辈子的事!6.有一次课堂上的学生捣乱。老师:我还从来没见过你这样的学生!学生:你这样的老师我见多了!(好吧,你知道就好,千
阅读全文
摘要: Windows7下,SQLServer2008 附加数据库时报错,无法附加,在不考虑数据库附加文件有损坏的情况下,大多是因为权限的原因。其中一种情况的解决办法:分别在数据库的 .mdf 和 .ldf 的两个文件上,鼠标右键单击文件 -> Properties(属性)-> Security(安全)选项卡 -> Edit(编辑) ->Add(添加)-> 添加当前登录的 windows7 系统帐户名(假定当前登录SQLServer2008是用本地系统帐户登录模式)。
阅读全文
摘要: 解决办法:菜单 -> Tools -> Options -> Designers -> 把“Prevent saving changes that require table re-creation” 前面复选框的勾去掉。Ok,the problem resolved.谢谢1楼 @toEverybody的评论,如果担心因去掉保护后,修改表结构导致数据库数据文件损坏(比如修改当前表的一些字段,将字段类型字节缩短,如 varchar(20) -> varchar(5),其实这也是微软设置这个“Prevent saving changes that require table re-creation
阅读全文