Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows窗体GUI在使用套接字时冻结_C#_Winforms_Sockets - Fatal编程技术网

C# Windows窗体GUI在使用套接字时冻结

C# Windows窗体GUI在使用套接字时冻结,c#,winforms,sockets,C#,Winforms,Sockets,当前,当我试图显示从套接字读取的数据时,GUI处于冻结状态。只有当我收到很多信息(每秒2-3条)时,当我显示一条或两条信息时,它才不会冻结。我使用的是异步套接字(非阻塞)。我想这与我如何向gui显示数据有关。代码: public class Globals { public static MainDialog myDialog; } public partial class MainDialog : Form { public MainDialog() {

当前,当我试图显示从套接字读取的数据时,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(..)。正如我所说,它工作得很好,但当我一次收到许多消息时就不行了


有人有主意吗

看看代码,我猜从套接字读取数据的网络类不在单独的线程上。我将使用该类运行套接字数据,然后调用ProgressChanged将数据带回GUI。这是如何设置BackgroundWorker以运行作业和升级GUI的一个很好的示例。

无论您在何处放置网络代码,如果您每秒多次更新文本框,您的界面将无响应


请考虑在您的网络线程中缓冲消息,并使用计时器每秒仅更新一次文本框。

还记得在从其他线程调用gui控件更新时检查所需的调用。

异步在引擎盖下执行线程,因此它在单独的线程中。仍然感谢,我已经用InvokeRequired&BeginInvoke修复了它。如果您使用BackgroundWorker,就不需要InvokeRequired,我已经用InvokeRequired&BeginInvoke修复了它。谢谢以前也有过这种情况,只需快速找到所需的属性X-)