当我尝试显示从套接字读取的数据时,我的GUI正在冻结。当我显示一条或两条消息时,只有当我收到许多消息(每秒2-3个)时,它才会冻结。我正在使用异步套接字(非阻塞)。我想这与我如何向gui显示数据有关。代码:
public class Globals
{
public static MainDialog myDialog;
}
public partial class MainDialog : Form
{
public MainDialog()
{
InitializeComponent();
Globals.myDialog = this;
}
public void sendText(string text)
{
logBox.AppendText(text);
logBox.AppendText("\n");
}
}
然后我只是从我的网络类中调用Globals.myDialog.sendText(..)。正如我所说它工作正常,但不是我一次收到很多消息。
有人有想法吗?
答案 0 :(得分:2)
查看代码,我的猜测是,从套接字读取数据的网络类不在单独的线程上。我将使用BackgroundWorker类来运行套接字数据,然后调用ProgressChanged将数据带回GUI。 Here是如何设置BackgroundWorker以运行作业和更新GUI的一个很好的示例。
答案 1 :(得分:0)
无论您在何处放置网络代码,如果您每秒多次更新TextBox,您的界面将无法响应。
考虑可能在网络线程中缓冲消息,并使用计时器仅每秒更新一次TextBox。
答案 2 :(得分:0)
还记得在从其他线程调用gui控件的更新时检查InvokeRequired。