我确实有一个嵌入式板(迷你/微型210),我确实尝试过构建一个使用system.socket和C# ( vs2005 - wince5 device application )的应用程序,但是我的设备上确实有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";
}
}如您所见,当我的任务之一在代码中,第二个任务已经被注释时,我就会崩溃
我感谢你提前提供帮助。
发布于 2016-09-18 14:28:57
崩溃可能是由从辅助线程更新UI元素造成的。
con方法读取一个文本框,更新几个按钮和状态栏,这应该只发生在主应用程序线程上。
要验证这是否是问题所在,您可以简单地注释掉con方法中访问UI元素的行(在启动线程之前将textbox值复制到成员字符串,或者只是硬编码IP地址)并重新运行应用程序。
那么,要真正解决这个问题,就必须研究Control.Invoke。
https://stackoverflow.com/questions/39545867
复制相似问题