A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© guoguo 中级黑马   /  2014-3-10 10:36  /  995 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 guoguo 于 2014-3-25 09:14 编辑

public static void begin()
        {

            ThreadStart start = new ThreadStart(Insert);
            Thread thread = new Thread(start);
            thread.Start();
        }
        public static void Insert()
        {
            ProgressBar progressBar1 = new ProgressBar();//这里出现了错误,请问是怎么会是啊?
            progressBar1.IsIndeterminate = true;
            progressBar1.ToolTip = "正在加载数据!!~~";
..................................................


评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

2 个回复

倒序浏览
因为你在自己新建的线程中进行了修改UI组件的操作,而.NET架构认为这样的操作时不安全的。如果需要在其他线程中更新UI组件,要使用回调函数。
具体见MSDN的说明:http://msdn.microsoft.com/zh-cn/library/ms171728(v=vs.90).aspx
回复 使用道具 举报


Thread NetServer = new Thread(new ThreadStart(NetServerThreadFunc));
NetServer.Start();

WPF工程里,此线程不可以操作UI元素,避免方法如下:

1、public delegate void DeleFunc();
public void Func()
{

//使用ui元素

}



线程函数中做如此调用:

System.Windows.Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal,
new DeleFunc(Func));

即可。

2、 Thread NetServer = new Thread(new ThreadStart(NetServerThreadFunc));
NetServer .SetApartmentState(ApartmentState.STA);
NetServer .IsBackground = true;

NetServer.Start();

线程函数中做如此调用:

System.Windows.Threading.Dispatcher.Run();
即可。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马