vs2008 C# wince
我想把message的信息显示显示到label1上可是不行提示错误:control.invoke必学用于在独立线程上创建的空间交互求改正,求代码改正O(∩_∩)O谢谢us...
我想把message的信息显示显示到label1上可是不行 提示错误:control.invoke 必学用于在独立线程上创建的空间交互
求改正,求代码改正 O(∩_∩)O谢谢
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace server1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//创建新的socket,基于TCP的stream socket(流式套接字)
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将socket绑定到主机上的某个端口
socket.Bind(new IPEndPoint(IPAddress.Any, 4530));
//启动监听:并设置一个最大的队列长度
socket.Listen(4);
//开始接收客户端的连接请求
socket.BeginAccept(new AsyncCallback((ar) =>
{
//客户端的socket实例,我们后续可以将其保存起来
try
{
var client = socket.EndAccept(ar);
client.Send(Encoding.Unicode.GetBytes("接收到请求 : " + DateTime.Now.ToString()));
//接受客户端的消息,和在客户端的方式一样
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);
}
catch (Exception ex)
{
label1.Text = "错误:" + ex.Message;
}
}), null);
label1.Text = "服务器准备好!";
}
static byte[] buffer = new byte[1024];
private void ReceiveMessage(IAsyncResult ar)
{
try
{
var socket = ar.AsyncState as Socket;
var length = socket.EndReceive(ar);
//读取出来消息的内容
var message = Encoding.Unicode.GetString(buffer, 0, length);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////显示消息
label1.Text = message;
//MessageBox.Show(message);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////把消息显示到label1上
//接受下一个消息,递归的接收
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback
(ReceiveMessage), socket);
}
catch (Exception ex)
{
//label1.Text = ex.Message;
}
}
}
} 展开
求改正,求代码改正 O(∩_∩)O谢谢
using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
namespace server1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//创建新的socket,基于TCP的stream socket(流式套接字)
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将socket绑定到主机上的某个端口
socket.Bind(new IPEndPoint(IPAddress.Any, 4530));
//启动监听:并设置一个最大的队列长度
socket.Listen(4);
//开始接收客户端的连接请求
socket.BeginAccept(new AsyncCallback((ar) =>
{
//客户端的socket实例,我们后续可以将其保存起来
try
{
var client = socket.EndAccept(ar);
client.Send(Encoding.Unicode.GetBytes("接收到请求 : " + DateTime.Now.ToString()));
//接受客户端的消息,和在客户端的方式一样
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);
}
catch (Exception ex)
{
label1.Text = "错误:" + ex.Message;
}
}), null);
label1.Text = "服务器准备好!";
}
static byte[] buffer = new byte[1024];
private void ReceiveMessage(IAsyncResult ar)
{
try
{
var socket = ar.AsyncState as Socket;
var length = socket.EndReceive(ar);
//读取出来消息的内容
var message = Encoding.Unicode.GetString(buffer, 0, length);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////显示消息
label1.Text = message;
//MessageBox.Show(message);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////把消息显示到label1上
//接受下一个消息,递归的接收
socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback
(ReceiveMessage), socket);
}
catch (Exception ex)
{
//label1.Text = ex.Message;
}
}
}
} 展开
展开全部
楼上说的已经挺明白的了。
你现在需要调整的不是你的程序,是你程序运行时所用的那套WinCE系统。
WinCE跟WinXP不一样,它基本上都是定制的,在定制的过程中必须加入WMP的支持。
如果你没有条件修改或重新定制一个WinCE,这个问题你就不用想解决的办法了。
Platform Builder 是微软提供的 WinCE 定制工具。
你现在需要调整的不是你的程序,是你程序运行时所用的那套WinCE系统。
WinCE跟WinXP不一样,它基本上都是定制的,在定制的过程中必须加入WMP的支持。
如果你没有条件修改或重新定制一个WinCE,这个问题你就不用想解决的办法了。
Platform Builder 是微软提供的 WinCE 定制工具。
追问
就是无法解决了 这么可怜
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
名片
2024-10-28 广告
2024-10-28 广告
Altair HyperWorks是一套功能强大的集成化CAE(计算机辅助工程)软件平台,由Altair公司开发。它涵盖了结构分析、流体动力学、优化、多体动力学、电磁场仿真等多个领域,提供了丰富的仿真工具和优化算法。HyperWorks以其...
点击进入详情页
本回答由名片提供
展开全部
如何在WinCE中解决“Control.Invoke 必须用于与在独立线程上创建的控件交互”的问题
关于这个问题,网上有不少文章也写了,是跨线程调用引起的,后来发现最简单的解决方法如下:
假如Winform界面上有个Lable控件,叫做lb_Msg,现在通过UDP服务线程收到了新的数据,想在lb_Msg上显示出来。
1、声明一个委托
private delegate void SetMessageDelegate(Label control, string msg);
2、为此委托实例化一个函数
private void setLabelText(Label myControl, string myArg)
{
myControl.Text = myArg;
}
3、调用
object[] myArray = new object[2];
myArray[0] = this.lb_Msg;
myArray[1] = "刷卡成功,请下一位管理员刷卡.";
this.lb_Msg.BeginInvoke(new SetMessageDelegate(this.setLabelText), myArray);
关于其他界面控件的使用方法均类似。
关于这个问题,网上有不少文章也写了,是跨线程调用引起的,后来发现最简单的解决方法如下:
假如Winform界面上有个Lable控件,叫做lb_Msg,现在通过UDP服务线程收到了新的数据,想在lb_Msg上显示出来。
1、声明一个委托
private delegate void SetMessageDelegate(Label control, string msg);
2、为此委托实例化一个函数
private void setLabelText(Label myControl, string myArg)
{
myControl.Text = myArg;
}
3、调用
object[] myArray = new object[2];
myArray[0] = this.lb_Msg;
myArray[1] = "刷卡成功,请下一位管理员刷卡.";
this.lb_Msg.BeginInvoke(new SetMessageDelegate(this.setLabelText), myArray);
关于其他界面控件的使用方法均类似。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询