C/S结构,界面启动时需要加载数据,数据存在大量的运算,导致界面启运慢,想通过C#线程来解决.在界面Load方法中,加载数据,使用如下: delegate void InitSystemMenuInvoker(); //委托,加载一些填充数据
private Thread SystemMenuThread = null; //加载线程界面调用
private void MainFrame_Load(object sender, EventArgs e) /
{
//InitSystemMenu();
SystemMenuThread = new Thread(new ThreadStart(SystemMenuInvok));//
SystemMenuThread.Start();
}
委托运行
private void SystemMenuInvok()
{
///委托运行的方法
InitSystemMenuInvoker menu = new InitSystemMenuInvoker(InitSystemMenu);
BeginInvoke(menu);
}在运行时,总会出现,界面死在那里,等线程加载完数据才显示,有什么办法可以让界面正常显示,线程在后台加载数据,不影响用户对UI的操作.
还有,线程运行完之后,怎么关闭掉,就是如何监测到这个线程已加载完数据.
private Thread SystemMenuThread = null; //加载线程界面调用
private void MainFrame_Load(object sender, EventArgs e) /
{
//InitSystemMenu();
SystemMenuThread = new Thread(new ThreadStart(SystemMenuInvok));//
SystemMenuThread.Start();
}
委托运行
private void SystemMenuInvok()
{
///委托运行的方法
InitSystemMenuInvoker menu = new InitSystemMenuInvoker(InitSystemMenu);
BeginInvoke(menu);
}在运行时,总会出现,界面死在那里,等线程加载完数据才显示,有什么办法可以让界面正常显示,线程在后台加载数据,不影响用户对UI的操作.
还有,线程运行完之后,怎么关闭掉,就是如何监测到这个线程已加载完数据.
解决方案 »
- 我想在Word的某一页的最后一行加段文字 但是他前面的内容会发生变化 怎么能够实现?我用的是Aspose.Words
- treeview显示的checkbox选中问题
- 一个二维数组Game[20,15] Game[i,j]=1是怎么算的
- 多线程老是出现这样的错误,实在不行了,求救!
- C#如何获取浏览器发送和接收的数据
- 在VS2005C#中如何调用PROLOG编写的DLL
- 怎么实现点击picturebox显示的图片后,新开一个IE窗口显示该图片
- 麻烦大家帮个忙
- 如何在NET Framework 1.0 下使用FtpWebRequest
- c# GDI+画线的问题,如图,这是如何做到的?
- StreamReader按byte[]方式读取
- 我怎么能读取一个HTML文件 然后把里面的内容 负值给一个文本控件
2 private const int TEST_COUNT = 10000;
3 private void button1_Click(object sender, System.EventArgs e)
4 {
5 mi = new MethodInvoker(DoWork);
6 mi.BeginInvoke(new AsyncCallback(DoneWork), null);
7 }
8 private void DoWork()
9 {
10 sl = new SortedList();
11 InitialPB(TEST_COUNT);
12 for (int i =0;i<TEST_COUNT;i++)
13 {
14 sl.Add(i,"NoWay" + i.ToString());
15 Thread.Sleep(100);
16 RefreshText("NoWay" + i.ToString());
17 RefreshPB(1);
18 }
19
20 }
21 private void InitialPB(int max)
22 {
23 if( InvokeRequired )
24 {
25 this.Invoke( new IntDelegate(InitialPB), new object [] { max } );
26 return ;
27 }
28 progressBar1.Maximum = max ;
29 progressBar1.Value = 0;
30 }
31 private void RefreshText(string item)
32 {
33 if( InvokeRequired )
34 {
35 this.Invoke( new StringDelegate(RefreshText), new object [] { item } );
36 return ;
37 }
38 this.textBox1.Text = item;
39 }
40 private void RefreshPB(int Value)
41 {
42 if( InvokeRequired )
43 {
44 this.Invoke( new IntDelegate(RefreshPB), new object [] {Value} );
45 return ;
46 }
47 progressBar1.Value+=Value;
48 }
49 private void DoneWork(IAsyncResult result)
50 {
51 if( InvokeRequired )
52 {
53 Invoke(new AsyncCallback(DoneWork), new Object [] { result } );
54 return ;
55 }
56 MessageBox.Show("Done!")
57;
58 }
59 private void button2_Click(object sender, System.EventArgs e)
60 {
61 mi.EndInvoke(null);
62 }
63 private MethodInvoker mi= null;
64 private delegate void IntDelegate(int num);
65 private delegate void StringDelegate(string str);