请教下各位大佬,在方法A中,我绑定了port.DataReceived事件,触发事件后我获取到了串口通信的值并转化为 string a,我想在方法A中将a的值当作返回值return要怎么写?大概过程如下,新人对事件委托这些有点搞不清楚,麻烦大佬指点指点public static stringA()
{
...........
port.Open();
port.DataReceived += Port_DataReceived;
return a; //此处希望能将a的值传出
}
private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] portdata = new byte[10];
port.Read(portdata, 0, 10);
a = Encoding.UTF8.GetString(portdata);
}
{
...........
port.Open();
port.DataReceived += Port_DataReceived;
return a; //此处希望能将a的值传出
}
private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] portdata = new byte[10];
port.Read(portdata, 0, 10);
a = Encoding.UTF8.GetString(portdata);
}
解决方案 »
- C#程序崩溃求解。求C#实现ADSL拨号的源码 非CMD模式
- c#(winform)捕获浏览器地址,高手指点下。
- 看到一个软件数据使用slt后缀的文件保存,这是什么?怎么打开
- 在后台取前台Div或Table的innerHTML或innerText问题
- 讨论一下,一个人脉网站需要多少天能做出来
- 问一个比较菜的问题???
- 使用c#进行 word文档合并,怎么可以保持页面设置不变?
- VC++6.0转C#
- 如何根据字符串得到对象?
- 哪们大虾有vs.net的序列号呀????????????????
- System.Windows.Markup.XamlParseException
- byte[] strp = System.Text.Encoding.GetEncoding("gb2312").GetBytes(strKey);转换结果
private StringBuilder builder = new StringBuilder();
// private StringBuilder bs = new StringBuilder();//用于存储一条完整信息;
Boolean ope = false;
public Form1()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
}
private void Form1_Load(object sender, EventArgs e)
{
string[] names = SerialPort.GetPortNames();
if (names == null)
{
MessageBox.Show("没有可用的串口", "提示");
}
else
{
foreach (string str in names)
{
toolStripComboBox2_Potrs.Items.Add(str);
}
}
toolStripComboBox1_Rate.Text = "9600";
toolStripComboBox1_Rate.Items.Add("4800");
toolStripComboBox1_Rate.Items.Add("9600");
//添加事件注册
serialport.DataReceived += new SerialDataReceivedEventHandler(serialPort_DataRecived);
}
void serialPort_DataRecived(object sender, SerialDataReceivedEventArgs e)
{
Thread.Sleep(500);
builder.Clear();//清除字符串构造器的内容
string str = "";
int n = serialport.BytesToRead;//先记录下来,避免丢失
label3.Text = n.ToString();
byte[] buf = new byte[n];
serialport.Read(buf, 0, n);//读取缓冲区数据
this.Invoke((EventHandler)(delegate
{
if (checkBox1_Hex.Checked)
{
foreach (byte b in buf)
{
builder.Append(b.ToString("X2") + " ");
}
}
else
{
//直接以ASCII规则输出
builder.Append(Encoding.ASCII.GetString(buf));
// bs.Append(Encoding.ASCII.GetString(buf));
}
//追加文本
this.textBox1_ReciMes.AppendText(builder.ToString());
//create a new thread
//;
Thread t = new Thread(new ParameterizedThreadStart(Options));
Console.WriteLine(builder.ToString());
t.Start(builder.ToString());
}));
}