多线程,关于解决给image控件重新绑定数据源的办法。多谢
我要实现如下功能,有一个image控件绑定的是我一个文档的摘要和内容,当我点击图片到时候,弹出这个word文档,此时图片那个窗体隐藏,同时我修改word文档里的内容并保存,我希望能够刷新图片。说的明白点,就是我修改了什么,图片重新绑定什么内容。
这个过程中,我无法重新绑定image的数据源,原因是因为有一个线程正在使用它,求解决办法。求好心人,帮忙。
代码如下:
System.Drawing.Image image = mf.GetThumbnailImage(300, 300, null, System.IntPtr.Zero);
image.Save("C:/temp1.bmp");
//Summary
imageThumbnails.ToolTip = pageRange.Text;
//load the thumb image into control
BitmapImage bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.UriSource = new Uri("C:/temp1.bmp", UriKind.Absolute);
bitmapImage.EndInit();
imageThumbnails.Source = bitmapImage;
((WORD._Application)WordApp).Quit(); --------------------编程问答-------------------- 先沙发再看 --------------------编程问答-------------------- 你用的word 来该图片??
然后 改完图片后 在加载? --------------------编程问答--------------------
是的,我把word存成图片格式,用image控件显示。
第二:我是改完word内容,重新加载图片。图片是不可编辑的。 --------------------编程问答-------------------- 没人知道吗?求解,请教高手,我不知道是不是可以用其他办法来实现这个功能。 --------------------编程问答-------------------- 通过API,参考http://bytes.com/topic/c-sharp/answers/523657-c-printing-content-richtextbox-image-wysiwyg-mode
--------------------编程问答-------------------- 我觉得 是 因为 word 没有关闭 ,图片还在用着 所以不能访问
要判断 word 是否 关闭后在访问 数据源 --------------------编程问答--------------------
既然你在修改word文档的时候窗体是隐藏的,那么你可以将"C:/temp1.bmp"图片所占用的资源释放,用Dispose()方法,在修改完word时在重新制定image的资源文件即可 --------------------编程问答-------------------- --------------------编程问答--------------------
那就先关闭,例如:
--------------------编程问答--------------------
//图片赋值
string myfilename = T_path.Text.Trim(); //OpenFileDialog1.FileName;
FileStream fs = new FileStream(myfilename, FileMode.Open, FileAccess.Read);
byte[] mybytes = new byte[fs.Length];
//fs.Read(mybytes, 0, Convert.ToInt32(fs.Length));
fs.Read(mybytes, 0, mybytes.Length);
member.Poto = Convert.ToBase64String(mybytes);
fs.Close();
//显示图片
pictureBox1.Refresh();
if (ds.Tables[0].Rows[0]["Poto"].ToString().Trim().Length > 0)
{
//图片赋值
byte[] buffByte = Convert.FromBase64String(ds.Tables[0].Rows[0]["Poto"].ToString());
System.IO.MemoryStream ms = new System.IO.MemoryStream(buffByte);
pictureBox1.Image = Image.FromStream(ms);
ms.Position = 0;
ms.Close();
Poto = Convert.ToBase64String(buffByte).ToString();
}
事实上,我可以在绑定数据源之前将word关闭,但是因为这个image控件并没有释放线程,所以他还是不允许我重新绑定或者加载。换句话说,我重新换个图片,还是认为我没释放。
我觉得是我对线程理解的有问题。感谢各位楼上的。 --------------------编程问答--------------------
其实图片不是被占用的,是image那个控件被占用了,因为我隐藏了主窗体。非常感谢。
补充:.NET技术 , C#