黑马程序员技术交流社区

标题: 线程问题 [打印本页]

作者: guoguo    时间: 2014-3-10 10:36
标题: 线程问题
本帖最后由 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 = "正在加载数据!!~~";
..................................................



作者: 鬼鬼    时间: 2014-3-24 00:16
因为你在自己新建的线程中进行了修改UI组件的操作,而.NET架构认为这样的操作时不安全的。如果需要在其他线程中更新UI组件,要使用回调函数。
具体见MSDN的说明:http://msdn.microsoft.com/zh-cn/library/ms171728(v=vs.90).aspx
作者: mdb    时间: 2014-3-24 13:56


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();
即可。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2