【发布时间】:2015-06-01 18:59:08
【问题描述】:
我试图在一个引用到 Windows 窗体项目的 DLL 文件中引发一个事件。
当我运行程序“对象未设置为对象的实例”时,我收到以下消息:
命名空间服务器 {
public delegate void messageHnadler();
public class ClassServer
{
public event messageHnadler messageForChat
public string Message { get; set; }
public Socket listenerSocket;
public BinaryFormatter transBinary;
public Thread threadingServer;
public TcpListener listenerServer;
private List<TcpClient> connectedClients = new List<TcpClient>();
public bool OpenServer(string ipAddress, int PortNumber)
{
try
{
listenerServer = new TcpListener(IPAddress.Parse(ipAddress), PortNumber);//creating listener for clients to connect
listenerServer.Start();
threadingServer = new Thread(LoopThroughClients);
threadingServer.Start();
threadingServer = new Thread(GetMessage);
threadingServer.Start();
return true;
}
catch (Exception)
{
return false;
}
}
public void LoopThroughClients()
{
listenerSocket = listenerServer.AcceptSocket();
}
public void GetMessage()
{
while (true)
{
if (listenerSocket != null)
{
NetworkStream streamWithClient = new NetworkStream(listenerSocket);
transBinary = new BinaryFormatter();
string stringFromClient = (string)transBinary.Deserialize(streamWithClient);
if (stringFromClient != null)
{
Message = stringFromClient;
messageForChat();
}
streamWithClient = new NetworkStream(listenerSocket);
BinaryFormatter tranBinary = new BinaryFormatter();
tranBinary.Serialize(streamWithClient, stringFromClient);
stringFromClient = null;
}
}
}
在 windows 窗体项目中,我将事件签名到函数:
命名空间 Chat_Project_Server_UI { 公共部分类 SeverUI:表单 { OpenServerForm openServer = new OpenServerForm(); ClassServer serverForEvent = new ClassServer();
public SeverUI()
{
InitializeComponent();
openServer.ShowDialog();
serverForEvent.messageForChat += new messageHnadler(serverForEvent_messageForChat);
OpenningServer();
}
public void OpenningServer()
{
if(openServer.IsConnected)
{
ChatTextBox.AppendText("SERVER OPEN!\n");
}
else
{
ChatTextBox.AppendText("Faild to open server...\n");
}
}
private void test_Click(object sender, EventArgs e)
{
ChatTextBox.AppendText("aaaaa");
}
public void EventHolder()
{
}
void serverForEvent_messageForChat()
{
ChatTextBox.AppendText(serverForEvent.Message);
}
}
【问题讨论】:
-
我不太明白 openServer 和 serverForEvent 变量的类型是什么。如果它必须按您期望的那样工作,您应该像这样创建一个 ClassServer 的实例。 ClassServer server = new ClassServer();然后设置要调用的方法——server.messageForChat += serverForEvent_messageForChat;调用方法 - server.GetMessage()
-
您需要展示其余的相关代码,否则我们无法给出明确的答案。
-
我已经更新了帖子...这是所有代码。