会员
周边
众包
新闻
博问
闪存
赞助商
所有博客
当前博客
我的博客
我的园子
账号设置
简洁模式
...
退出登录
注册
登录
我思考..我存在..
好好学习..天天向上.. 159753258 楼上我老婆,楼下是我! 呼叫中心、小型信息管理系统,电话:13516218837
博客园
首页
新随笔
联系
管理
订阅
多线程程序的不确定性
代码
1
using
System;
2
using
System.Collections;
3
using
System.Collections.Generic;
4
using
System.ComponentModel;
5
using
System.Data;
6
using
System.Drawing;
7
using
System.Text;
8
using
System.Windows.Forms;
9
10
using
System.Threading;
11
12
namespace
CSharpGeriac
13
{
14
public
partial
class
Form1 : Form
15
{
16
public
Form1()
17
{
18
InitializeComponent();
19
20
Thread t
=
new
Thread(
new
ThreadStart(ChangeLabel));
21
t.Start();
22
}
23
24
private
void
ChangeLabel()
25
{
26
myClassCollection coll
=
new
myClassCollection();
27
foreach
(MyClass c
in
coll)
28
{
29
SetLabelText(c);
30
Thread.Sleep(
1000
);
31
}
32
}
33
34
private
void
SetLabelText(MyClass myClass)
35
{
36
//
label.Text = number.ToString();
37
//
Do NOT do this, as we are on a different thread.
38
39
//
Check if we need to call BeginInvoke.
40
if
(
this
.InvokeRequired)
41
{
42
//
Pass the same function to BeginInvoke,
43
//
but the call would come on the correct
44
//
thread and InvokeRequired will be false.
45
this
.BeginInvoke(
new
SetLabelTextDelegate(SetLabelText),
46
new
object
[]
{ myClass }
);
47
48
return
;
49
}
50
51
label1.Text
=
myClass.Name;
52
}
53
54
private
delegate
void
SetLabelTextDelegate(MyClass myClass);
55
}
56
57
public
class
myClassCollection
58
{
59
[Filed]
#region
[Filed]
60
61
private
IList
<
MyClass
>
myClassItems
=
new
List
<
MyClass
>
();
62
63
#endregion
64
65
[Constructor]
#region
[Constructor]
66
67
public
myClassCollection()
68
{
69
for
(
int
i
=
0
; i
<
100
; i
++
)
70
{
71
MyClass my
=
new
MyClass();
72
my.Name
=
"
Nmae
"
+
new
Random().Next(
100
).ToString();
73
my.Age
=
new
Random().Next(
100
);
74
myClassItems.Add(my);
75
Thread.Sleep(
10
);
//
加了这句和不加这句,结果不一样。
76
}
77
}
78
79
#endregion
80
81
[property]
#region
[property]
82
83
public
IList
<
MyClass
>
MyCollection
84
{
85
get
86
{
87
return
myClassItems;
88
}
89
set
90
{
91
myClassItems
=
value;
92
}
93
}
94
95
#endregion
96
97
[index]
#region
[index]
98
99
public
MyClass
this
[
int
index]
100
{
101
get
102
{
103
return
(MyClass)myClassItems[index];
104
}
105
}
106
107
#endregion
108
109
GetEnumerator
#region
GetEnumerator
110
111
public
IEnumerator GetEnumerator()
112
{
113
foreach
(MyClass c
in
myClassItems)
114
{
115
yield
return
c;
116
}
117
}
118
119
#endregion
120
121
}
122
123
public
class
MyClass
124
{
125
[Constructor]
#region
[Constructor]
126
#endregion
127
128
[Filed]
#region
[Filed]
129
130
private
string
_name;
131
132
private
int
_age;
133
134
#endregion
135
136
[property]
#region
[property]
137
138
public
string
Name
139
{
140
get
141
{
142
return
_name;
143
}
144
set
145
{
146
_name
=
value;
147
}
148
}
149
150
public
int
Age
151
{
152
get
153
{
154
return
_age;
155
}
156
set
157
{
158
_age
=
value;
159
}
160
}
161
162
#endregion
163
}
164
165
}
/Files/nanshouyong326/CSharpGeriac.rar
程序中我加入注释的一句:Thread.Sleep(10);//加了这句和不加这句,结果不一样。高手可以测试下。我不明白为什么,,请高手指点!!!
posted @
2007-05-08 20:04
南守拥
阅读(
443
) 评论(
0
)
编辑
收藏
举报
刷新页面
返回顶部
公告