解决 Control.Invoke 必须用于与在独立线程上创建的控件交互。在智能设备上的(c# / PDA)
2012-06-18 17:39
260 查看
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 OpenNETCF.Net;
using OpenNETCF.Net.NetworkInformation;
using System.Threading;
namespace GetMAC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 声明一个委托
private delegate void NewDel();
// 创建一个 新线程的方法
public void Kaishi()
{
Thread thread;
ThreadStart threadstart = new ThreadStart(start);
thread = new Thread(threadstart);
thread.Start();
}
// 屏蔽错误的方法 说白了 就是通过了一个 委托
// 解决Control.Invoke 必须用于与在独立线程上创建的控件交互。
private void start()
{
if (InvokeRequired)
{
// 要 努力 工作的 方法
BeginInvoke(new NewDel(GetMac));
}
}
// 这里是主要的为了提供带参数的时候方便
public void Read()
{
Kaishi();
}
// 调用方法
private void button1_Click(object sender, EventArgs e)
{
// Read(); // 两个都是一样的 ,主要是 为了扩展的 方便
// Kaishi();
}
// 实质工作的 方法体
private void GetMac()
{
string mac = "";
int a = 0;
foreach (INetworkInterface currentInterface in NetworkInterface.GetAllNetworkInterfaces())
{
a = 1;
mac = currentInterface.GetPhysicalAddress().ToString();
if (a != 0)
{
break;
}
}
label1.Text = mac.Trim();
}
private void Form1_Load(object sender, EventArgs e)
{
//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using OpenNETCF.Net;
using OpenNETCF.Net.NetworkInformation;
using System.Threading;
namespace GetMAC
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// 声明一个委托
private delegate void NewDel();
// 创建一个 新线程的方法
public void Kaishi()
{
Thread thread;
ThreadStart threadstart = new ThreadStart(start);
thread = new Thread(threadstart);
thread.Start();
}
// 屏蔽错误的方法 说白了 就是通过了一个 委托
// 解决Control.Invoke 必须用于与在独立线程上创建的控件交互。
private void start()
{
if (InvokeRequired)
{
// 要 努力 工作的 方法
BeginInvoke(new NewDel(GetMac));
}
}
// 这里是主要的为了提供带参数的时候方便
public void Read()
{
Kaishi();
}
// 调用方法
private void button1_Click(object sender, EventArgs e)
{
// Read(); // 两个都是一样的 ,主要是 为了扩展的 方便
// Kaishi();
}
// 实质工作的 方法体
private void GetMac()
{
string mac = "";
int a = 0;
foreach (INetworkInterface currentInterface in NetworkInterface.GetAllNetworkInterfaces())
{
a = 1;
mac = currentInterface.GetPhysicalAddress().ToString();
if (a != 0)
{
break;
}
}
label1.Text = mac.Trim();
}
private void Form1_Load(object sender, EventArgs e)
{
//System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
private void button2_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
相关文章推荐
- c# 解决 Control.Invoke 必须用于与在独立线程上创建的控件交互。在智能设备上的(PDA)
- 解决 Control.Invoke 必须用于与在独立线程上创建的控件交互。在智能设备上的(c# / PDA)
- 在WM下,获得当前路径处理和解决异常“Control.Invoke 必须用于与在独立线程上创建的控件交互。”
- c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
- c# 线程间操作无效: 从不是创建控件“textBox1”的线程访问它。解决方法
- C# 引发“线程间操作无效: 从不是创建控件“XXX”的线程访问它” 解决方法
- 黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)
- c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- C# 线程间操作无效: 从不是创建控件...的解决办法
- c# InvokeRequired 解决跨线程访问UI控件的问题
- BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)
- c#中Invoke使用方法(线程间操作无效: 从不是创建控件的线程访问它。那么创建它的线程是哪个线程?)
- invoke委托解决“线程间操作无效: 从不是创建控件的线程访问它”的问题
- C# 线程操作 出现“从不是创建控件lstUser的线程访问它”错误的解决方法
- C# 解决 调用线程非安全的控件xx不是在本线程上创建 异常
- 多线程委托之跨线程问题分析--在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke(解决方法已更新)
- [C#] Control.Invoke方法和跨线程访问控件
- 在该控件上执行的操作正从错误的线程调用。使用 Control.Invoke 或 Control.BeginInvoke 封送到正确的线程才能执行此操作。(以解决)
- c#中使用多线程访问winform中控件的若干问题 解决线程间操作无效: 从不是创建控件的线程访问它