mini210 socket多线程

时间:2016-09-17 10:42:30

标签: c# sockets embedded windows-ce multitasking

我有嵌入式主板(迷你/小型210) 我尝试在C#中构建一个使用 system.socket system.socket.ne 的应用程序(vs2005 - wince5设备应用程序但是我我的设备上有 wince 6 !!)

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

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

如果我消除多任务处理,当 networkstream.read 不在线或 networkstream.read 在线且我在等待数据时,我可能会丢失一些数据程序结束在超时之前不会响应。这是我的一些代码。希望它有所帮助。

此代码确实有效:

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";
        }

此代码剂量工作:

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";
        }
    }

正如你所看到的那样,当我的任务中的一个任务在代码中,第二个任务被评论时,我发现了这个崩溃

我提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

崩溃可能是由更新辅助线程的UI元素引起的。

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

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

然后要真正解决问题,你必须调查Control.Invoke