所以我再次声明一个委托,然后我在方法里再次使用多线程,在这个线程中启动另一个方法来完成我要的工作,然后再次委托给另一个方法来实现。
说的我自己都晕了。。。还是用代码来说话吧。
1
public
delegate
void
data_1Callback(DataTable dataTable);
//
委托操作DATATABLE
2
3
Remote.RemoteServer.UserCome
+=
new
Remote.UserComeHandler(RemoteServer_UserCome);
4
这个是刚启动时线程里方法的又一委托。
5
6
public
void
RemoteServer_UserCome(
object
o,
string
user,
string
userIP)
7
{ stopThread(); //事先停止该线程
8
t = new Thread(new ThreadStart(BindDataGrid));
9
t.Start();
10
11
}
12
13
void
stopThread()
14
{
15
if((t != null)&&(t.IsAlive))
16
{
17
t.Abort();
18
t.Join();
19
}
20
t = null;
21
}
22
23
public
void
BindDataGrid()
24
{
25
if(dtUser.Rows.Count < 1)
26
{
27
ColId.DataType = System.Type.GetType("System.Int32");
28
dtUser.Columns.Add("ID");
29
ColDateTime.DataType = System.Type.GetType("System.String");
30
dtUser.Columns.Add("上线时间");
31
dtUser.Columns.Add("用户名");
32
dtUser.Columns.Add("当前状态");
33
dtUser.Columns.Add("退出时间");
34
dtUser.Columns.Add("外网IP");
35
dtUser.Columns.Add("内网IP");
36
}
37
count ++;
38
DataRow dr = dtUser.NewRow();
39
40
dr[0] = count;
41
dr[1] = DateTime.Now.ToString();
42
dr[2] = userName;
43
dr[3] = "在线";
44
dr[4] = "";
45
dr[5] = NetIp;
46
dr[6] = WokIp;
47
48
dtUser.Rows.Add(dr);
49
50
dgUser.Invoke(new data_1Callback(data_1),new object[]
{dtUser});
51
}
52
53
private
void
data_1(DataTable dataTable)
54
{
55
try
56
{
57
this.dgUser.DataSource = dataTable;
58
this.dgUser.Refresh();
59
}
60
catch(Exception ex)
61
{
62
MessageBox.Show(ex.Message.ToString());
63
}
64
}

2

3

4

5

6

7



8

9

10

11

12

13

14



15

16



17

18

19

20

21

22

23

24



25

26



27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50



51

52

53

54



55

56



57

58

59

60

61



62

63

64

看起来好像有些乱,有不懂的给我留言吧。