首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mini210套接字多线程

mini210套接字多线程
EN

Stack Overflow用户
提问于 2016-09-17 10:42:29
回答 1查看 62关注 0票数 0

我确实有一个嵌入式板(迷你/微型210),我确实尝试过构建一个使用system.socket和C# ( vs2005 - wince5 device application )的应用程序,但是我的设备上确实有wince 6

我的目的是使用以太网发送和接收数据字节。对于发送,嗯,没有问题,但接收确实需要多任务处理。

我应该启动一个任务,这样如果有任何数据即将出现,它就可以监听端口,但是一旦我在代码中添加了线程部分,整个程序就会崩溃(在pc x64核心i5中不会这样做),但是在嵌入式板中它会崩溃。

如果我消除了多任务处理,我可能会失去一些数据,当networkstream.read不在在线或networkstream.read在线,我在等待数据,在程序结束时,将不会响应直到超时。这是我的一些密码。希望能帮上忙。

此代码确实有效:

代码语言:javascript
运行
复制
private void button_connect_Click(object sender, EventArgs e)
    {
        try
        {
            //Thread TH = new Thread(new ThreadStart(con));
            //TH.Start();
            con();
        }
        catch
        {
            MessageBox.Show("THREAD ERROR");
        }
    }
    public void con()
    {
        try
        {
            cli = null;
            cli = new TcpClient();
            cli.Connect(IPAddress.Parse(textBox_ip.Text),Convert.ToInt32(textBox_port.Text));
            st = null;
            st = cli.GetStream();
            button_connect.Enabled = false;
            button_Close.Enabled = false;
            button_disconnect.Enabled = true;
            statusBar1.Text = "Connected to server";
            //Thread rec = new Thread(new ThreadStart(recf));
            //rec.Start();
        }
        catch
        {
            MessageBox.Show("Connection faild","Error");
            statusBar1.Text = "Faild to connect to server";
        }

此代码使用而不是工作:

代码语言:javascript
运行
复制
private void button_connect_Click(object sender, EventArgs e)
    {
        try
        {
            Thread TH = new Thread(new ThreadStart(con));
            TH.Start();
            //con();
        }
        catch
        {
            MessageBox.Show("THREAD ERROR");
        }
    }
    public void con()
    {
        try
        {
            cli = null;
            cli = new TcpClient();
            cli.Connect(IPAddress.Parse(textBox_ip.Text),Convert.ToInt32(textBox_port.Text));
            st = null;
            st = cli.GetStream();
            button_connect.Enabled = false;
            button_Close.Enabled = false;
            button_disconnect.Enabled = true;
            statusBar1.Text = "Connected to server";
            //Thread rec = new Thread(new ThreadStart(recf));
            //rec.Start();
        }
        catch
        {
            MessageBox.Show("Connection faild","Error");
            statusBar1.Text = "Faild to connect to server";
        }
    }

如您所见,当我的任务之一在代码中,第二个任务已经被注释时,我就会崩溃

我感谢你提前提供帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-09-18 14:28:57

崩溃可能是由从辅助线程更新UI元素造成的。

con方法读取一个文本框,更新几个按钮和状态栏,这应该只发生在主应用程序线程上。

要验证这是否是问题所在,您可以简单地注释掉con方法中访问UI元素的行(在启动线程之前将textbox值复制到成员字符串,或者只是硬编码IP地址)并重新运行应用程序。

那么,要真正解决这个问题,就必须研究Control.Invoke

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39545867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档