项目的运行环境为wince7,使用vs2008,c#开发。实现一个server通过TCP连接20个client,进行数据交换。
遇到的问题:
窗体叫:Form1。
由于wince下的精简库,造成多线程调用不可以传递参数(socket server端为了1对多,会用多线程传递连接进行处理),于是写了第二个class,暂且叫A吧,将连接作为构造函数的参数传递过去,然后新建线程调用这个A的一个方法:a.doSTH()。通过这样处理,程序可以连接多个client,并进行数据传输了。
但是,同时还要更新UI,于是这个时候不知道如何是好了。。。
做过的尝试:
Form1里定义一个update函数:
public static void update(string str)
{
BeginInvoke ( ( ThreadStart ) delegate
{
p [ i ].BackColor = nColor;
} );
}
然后在A里调用:nameSpace.Form1.update("xxxx"),结果报错:非静态的字段、方法或属性“nameSpace.Form1.update(string)”要求对象引用。。。
于是修改update的定义,去掉static,变成
public void update(string str)
{
BeginInvoke ( ( ThreadStart ) delegate
{
p [ i ].BackColor = nColor;
} );
}
修改A的构造函数,加入第二个参数:Form1 frm,
然后调用的时候这样:frm..update("xxxx")。结果还是报相同的错误!!!
求教,这里要究竟要如何处理才能在A的方法里更新Form1的UI呢?本人还能想到的方法是,做一个公共的全局变量,A得方法里,获取到数据就追加给这个变量,Form1里建立一个新的线程去分析,然后update,这个思路应该是可行的,但是效率未免有点低,因为至少20个客户端,首先要有20个全局变量用于存储受到的数据,其次,Form1里这个用于分析的县城需要对这20个变量进行分析,速度肯定差点事儿,总不至于开20个线程去分别分析吧。。。因此这个方法作为最后无可奈何的情况下采用的备选。
请有经验的前辈指教,谢谢。
------解决方案--------------------
C# 没有用过,一般的做法是通过消息来触发窗体的更新