【发布时间】:2018-11-18 11:11:30
【问题描述】:
我正在寻找一种方法来从我想要独立而不依赖于 GUI 的类中更新 GUI。它是一个由监听器和客户端组成的网络类。这个类可以连接然后发送/接收数据。我希望这些数据能够使用 GUI 显示,但在类本身中没有任何与 GUI 相关的代码。
所以简而言之,网络类只知道自己。 GUI 知道网络类。
这是我要添加代码的地方
public void ReceiveBytes()
{
byte[] receivedPacket;
while (IsListeningForBytes)
{
receivedPacket = new byte[Packet.BUFFERSIZE];
try
{
int bytesRead = ClientSocket.Receive(receivedPacket, SocketFlags.None);
if (bytesRead > 0)
{
SocketObject.ProcessMessage(receivedPacket);
// Update GUI here after the message has been processed.
}
else
{
throw new Exception("No bytes read");
}
}
catch (Exception ex)
{
IsListeningForBytes = false;
Disconnect();
Console.WriteLine(ex.Message);
}
}
}
编辑:对不起大家,我会尽量让事情更清楚。我正在使用 Windows 窗体,为了这个练习,我们会说我有三个不同的控件:一个列表框、一个组合框和一个文本框,它们将根据发送的内容获取数据。 (我的实际应用程序有需要更新的列表框、组合框、复选框等)。
我知道我不应该从我的对象中引用 GUI,因此我的问题。
至于相关代码,不知道你想看什么。
我已阅读有关事件处理程序和委托的信息,但我不确定在这种情况下如何实际实现它。我最初将 GUI 更新方法作为操作传递给在需要时调用的类,但这似乎很冗长,并没有专门更新我想要的控件。
感谢您迄今为止的帮助。
【问题讨论】:
-
发布一些相关代码...顺便说一句,您可以使用
Task -
您使用的是哪个 UI 框架?表格?吗?控制台?
-
附言;如果您让调用者决定:只需实现要引发的事件。
-
很难猜出你想把数据放在哪里,但这里有一个例子,你有一个表单 1 中的文本框,你想从类 1 中填充它,然后制作一个方法,它需要一个字符串作为参数,并填充文本框。这个方法应该在 Form1 类中。然后从课堂上调用它。公共填充文本框(字符串数据){ textBox1.Text = data; } 然后从类 1 调用这个方法,如果你放一些代码,我们将能够提供更多帮助
标签: c# multithreading class user-interface