欢迎光临!由于缺乏知识,我现在卡住了。我有以下几点:
public void ClientEndConnect(IAsyncResult iar)
{
try
{
CommSocket = (Socket)iar.AsyncState;
CommSocket.EndConnect(iar);
OnNetworkEvents eventArgs = new OnNetworkEvents(true, "Connected: " + CommSocket.RemoteEndPoint.ToString(), string.Empty);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (ArgumentNullException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents(false, "Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
}这编译得很好,但由于这是一个回调,所以它实际上应该是:(static)
public static void ClientEndConnect(IAsyncResult iar)
{
try
{
CommSocket = (Socket)iar.AsyncState;
CommSocket.EndConnect(iar);
OnNetworkEvents eventArgs = new OnNetworkEvents(true, "Connected: " + CommSocket.RemoteEndPoint.ToString(), string.Empty);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
catch (ArgumentNullException e)
{
OnNetworkEvents eventArgs = new OnNetworkEvents(false, "Network Unavailable", e.Message);
OnUpdateNetworkStatusMessage(this, eventArgs);
}
)但是当我这样做的时候,我得到了一堆错误,比如:
错误%1非静态字段、方法或属性'NietzscheBattleships.NetworkHelper.CommSocket‘需要对象引用
由于我缺乏C#方面的知识,我无法理解这些错误。请帮我理解一下。
我正在阅读什么是静态的,但您的意见也将有助于澄清我的困惑。
发布于 2010-01-12 23:56:22
为什么回调应该是静态的?
您会得到指定的错误,因为您正在访问CommSocket,它是类的一个成员。
只要让你的回调不是静态的,一切都会好起来的。
您可以获得有关什么是static关键字here的更多信息。
发布于 2010-01-12 23:56:33
您在回调中引用了“this”,这仅对实例成员有效。
你有什么理由认为你的回调必须是静态的吗?
发布于 2010-01-12 23:54:54
如果您试图从静态方法访问/操作CommSocket,那么它也必须是静态的。
https://stackoverflow.com/questions/2050200
复制相似问题