日期:2014-05-17  浏览次数:20822 次

WPF多语言和多线程一起用会导致多语言不起作用,求解决办法!
本帖最后由 u011349913 于 2013-07-15 15:45:31 编辑

我在线程里,调用了BeginInvoke,来修改WPF窗体上一个控件的文字内容,本来一切正常,

然后,我又用 xaml 和 DynamicResource 标签,实现了运行时切换多语言,启动后,语言切换也看似一切正常,

但是,当线程改过控件文字后,多语言切换,对这个控件就不起作用了!其他控件还是正常的!

线程的代码里面,我也是按照多语言的方式,来修改控件上的文字,类似:


Dispatcher.Invoke((Action)delegate {
    testButton.Content = Application.Current.FindResource("AlreadyStart").ToString(); });


多语言的实现,用的是wpf里最常见的方案。

我在网上找了一些多线程和多语言的example的工程文件来测试,全都有这个问题,搜索不到解决办法,求助!

测试用工程文件:
链接:http://pan.baidu.com/share/link?shareid=4270780001&uk=3459752242
密码:qlqt
(不设密码百度就要审核)

这是网上很出名的一个多语言的example,打开后,通过左上角菜单切换中英文,我在右边添加了一个按钮,点一次,就启动一个线程,修改左边的按钮的文字。一旦修改过,再切换多语言,对左边的按钮就不起作用了!但线程里还是能够改!

求助啊,快把人整死了
WPF 多语言 线程 多国语言

------解决方案--------------------
引用:
Quote: 引用:

首先纠正一下你的错误
你没有办法使用多线程访问ui对象
ui对象只能被主线程访问
除非你把一些对象“冻结”

第二点 针对你的问题
其实你需要对你的控件重新赋值
testButton.Content = 这句要重新在执行一遍

没有看你的项目 如果想让我看下的话传csdn吧 其他网站公司不给上


谢谢回复,我死活都没找到csdn上传附件的按钮,没办法上传阿

你提供的解决办法,我没搞明白,你说:
testButton.Content = 这句要重新在执行一遍

在哪里执行?什么时候执行?
我猜测,你是说,我点击切换界面按钮的时候,还要new一个线程出来,在线程里再用Invoke来执行testButton.Content = ****

是这个意思吗?感觉很别扭阿,切换语言,还要单独写个线程来修改某几个控件,不合理啊


大体就是这个意思
在xaml里面写资源 实际上是一种绑定
而你只后台直接写的意思就是赋值
赋值你觉得你改变资源的值不需要重新再赋值一下么