静态函数中访问非静态成员的问题

junes8250 2004-05-06 01:31:53
.........
handler.BeginReceive(state.buffer,0,StateObject.BufferSize,0,new AsyncCallback(ReceiveCallBack),state);
.........
private static void ReceiveCallBack(IAsyncResult ar)
{
string content;
......
AddItem2ListBoxEx(content);
}
.....
public static void AddItem2ListBoxEx(Form2 form,string item)
{
//?****************在这里要访问类的非静态成员listBox1???????????????????? //this.listBox1.Items.Add(item);
}
该如何才能访问非静态成员listBox1呢?
...全文
88 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengch24 2004-05-06
  • 打赏
  • 举报
回复
C++中不能接受非静态成员参数,而C#中可以。
junes8250 2004-05-06
  • 打赏
  • 举报
回复
我是从C++来的,呵呵
zengch24 2004-05-06
  • 打赏
  • 举报
回复
junes8250(嬴):
我调试通过以下代码:
static void SetText(TextBox txtbox)
{
txtbox.Text = "Hello world";
}

private void button1_Click(object sender, System.EventArgs e)
{
SetText(this.textBox1);
}
你可能是从C++转过来的吧?
用窗体管理消息接收处理是将GUI与业务逻辑紧密耦合,应独立用一个类体系来管理。^_^
junes8250 2004-05-06
  • 打赏
  • 举报
回复
多谢啦.
istring 2004-05-06
  • 打赏
  • 举报
回复
定义一个参数类
public class StateObject
{
public StateObject()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public Socket workSocket=null;
public const int BufferSize=1024;
public byte[] buffer=new byte[BufferSize];
public StringBuilder sb=new StringBuilder();
public System.Windows.Forms.Form form=null;//**********here**
}
再定义对象将this传给它!
junes8250 2004-05-06
  • 打赏
  • 举报
回复
to:zengch24(zFin)
AddItem2ListBoxEx(this.listBox1, content);也是在静态函数里调用,但是this在静态函数里是无效的!
你猜的没错我的确用窗体来管理Tcp/IP消息接收,也想不出更好的方法.

to:elusion(落)
呵呵,是me,你说的给BeginReceiv的最后一个参数传一个this,BeginReceiv的参数好像是固定,
我先试试啊.
elusion 2004-05-06
  • 打赏
  • 举报
回复
又是你:)
给BeginReceiv的最后一个参数传一个this
在ReceiveCallBack里
Form2 form=(Form2)ar.AsyncState;
然后
form.listBox1.Items.Add(item);//这里不太妥 用form.BeginInvoke好一些
zengch24 2004-05-06
  • 打赏
  • 举报
回复
public static void AddItem2ListBoxEx(listBox lst,string item)
{
lst.Items.Add(item);
}

调用时:
AddItem2ListBoxEx(this.listBox1, content);
不过用窗体来管理Tcp/IP消息接收(如果我没猜错的话)好像不太合理,修改一下结构吧
junes8250 2004-05-06
  • 打赏
  • 举报
回复
这样写行么?
public static void AddItem2ListBoxEx(Form2 form,string item)
{
//?****************在这里要访问类的非静态成员listBox1????????????????????
form=new Form2;
form.listBox1.Items.Add(item);
}
好像不行吧.
lvenlee 2004-05-06
  • 打赏
  • 举报
回复
非静态对象只有在生成实例后才可以访问.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧