串口

dahongzao2012 2012-05-26 12:20:28
用c#写的串口程序窗体为何会卡,那位指教指教,我刚学。窗体很简单只有一个serialport,一个button,一个richtextbox

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace serialPort
{
public partial class Form1 : Form
{
Thread thethread ;
public Form1()
{
InitializeComponent();
serialPort1.Open();//打开串口
}

private void button1_Click(object sender, EventArgs e)
{
serialPort1.WriteLine(this.richTextBox1.Text);

this.richTextBox1.Text = "";
thethread.Join();
}


public void sar()
{
MethodInvoker mi = new MethodInvoker(var);
BeginInvoke(mi);
}
private void var()
{

richTextBox1.Text = "";

richTextBox1.Text = serialPort1.ReadLine();
}

private void Form1_Load(object sender, EventArgs e)
{
thethread = new Thread(new ThreadStart(sar));
thethread.Start();

}
}
}
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dahongzao2012 2012-06-16
  • 打赏
  • 举报
回复
对!!!!!!!!!!!!
只在此山中 2012-05-26
  • 打赏
  • 举报
回复
晕,没改完,点到了提交按钮,是下面这个才行委托:
public void sar(object sender, EventArgs e)
{
if (this.richTextBox1.InvokeRequired)
{
this.BeginInvoke(new EventHandler(sar), new Object[] { sender,EventArgs.Empty });
}
else
{
richTextBox1.Text = System.Convert.ToString(obj);
}
}

private void var()
{
sar("", EventArgs.Empty);
string line = serialPort1.ReadLine();
sar(line, EventArgs.Empty);
}

private void Form1_Load(object sender, EventArgs e)
{
thethread = new Thread(new ThreadStart(var)); //改var
thethread.Start();
}
只在此山中 2012-05-26
  • 打赏
  • 举报
回复
哦,原来你的要求是这个,UI的用委托,读串口的不用委托.如下:

public void sar()
{
richTextBox1.Text = "";
}

private void var()
{
MethodInvoker mi = new MethodInvoker(sar); //改sar
BeginInvoke(mi);

richTextBox1.Text = serialPort1.ReadLine();
}

private void Form1_Load(object sender, EventArgs e)
{
thethread = new Thread(new ThreadStart(var)); //改var
thethread.Start();

}

dahongzao2012 2012-05-26
  • 打赏
  • 举报
回复
不用委托就成线程间的无效调用了,我是想让一个线程读数据,一个线程写数据
只在此山中 2012-05-26
  • 打赏
  • 举报
回复
mi.Invoke();
或者也可以不用委托,你不就是要在另外这个线程操作串口.
dahongzao2012 2012-05-26
  • 打赏
  • 举报
回复

还是不行
只在此山中 2012-05-26
  • 打赏
  • 举报
回复
BeginInvoke(mi); 是把消息给了UI,改为 Invoke(mi);

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧