Wpf中“由于其他线程拥有此对象,因此调用线程无法对其进行访问”

我的xaml中<Grid><UniformGridRows="2"Margin="0,0,0,40"><CanvasName="Image1"Margin="5"Back... 我的xaml中
<Grid>
<UniformGrid Rows="2" Margin="0,0,0,40">
<Canvas Name="Image1" Margin="5" Background="#FFFFC0C0"></Canvas>
</UniformGrid>
<Button Content="Play" Width="40" Height="30" Name="play" VerticalAlignment="Bottom" Click="play_Click"></Button>
</Grid>
代码中写了很简单的一个线程

private void play_Click(object sender, RoutedEventArgs e)//按钮响应事件
{
Thread th = new Thread(refresh);
th.IsBackground = true;
th.Start();
}
void refresh()
{
while (true)
{
BitmapImage imagelist = new BitmapImage(new Uri("D:\\VS2010\\Project\\PreView\\PreView\\bin\\Debug\\1.jpg"));
Draw(imagelist);
}
}
public delegate void DrawHandler(BitmapImage bitmap);
void Draw(BitmapImage bitmap)
{
App.Current.Dispatcher.Invoke(DispatcherPriority.Normal, new DrawHandler(ActualDraw), bitmap);
}
void ActualDraw(BitmapImage bitmap)
{
Image1.Background = new ImageBrush(bitmap);
//如果将这里换成Image1.Background = new BitmapImage(new Uri("D:\\VS2010\\Project\\PreView\\PreView\\bin\\Debug\\1.jpg"));就没有问题了?为什么?
}

哪里写的有问题?
展开
 我来答
livershi
2014-04-09 · TA获得超过165个赞
知道小有建树答主
回答量:208
采纳率:0%
帮助的人:210万
展开全部
这是因为bitmap控件是在你新开的线程里面创建的.而你委托后在主线程里面去调用他,就出错了.

如果是在主线程里面New 一个图片的话是可以的.
BitmapImage imagelist = new BitmapImage(new Uri(@"D:\\VS2010\\Project\\PreView\\PreView\\bin\\Debug\\1.jpg"));
void ActualDraw(BitmapImage bitmap)
{
Image1.Background = new ImageBrush(imagelist);
}
更多追问追答
追问
我已经找到原因了
是BitmapImage资源无法释放的问题
在while (true)
{
imagelist.Freeze();//new后面加上这句就OK
Draw(imagelist);
}
追答
imagelist.Freeze();
此方法不是释放资源,而是冻结依赖项属性.
这个方法将imagelist的内部的Dispatcher属性设置为空,所以任何线程调他都不会出错.
DanDing_Ge
2014-04-09 · TA获得超过737个赞
知道小有建树答主
回答量:414
采纳率:0%
帮助的人:103万
展开全部
bitmap资源之前被调用过,没有释放,所以再调用时无法访问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Lastoco
2014-04-09 · TA获得超过121个赞
知道小有建树答主
回答量:312
采纳率:100%
帮助的人:221万
展开全部
应该是你在在线程创建了控件,却在一个新的线程中调用它了。
这是多线程中常见问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式