当前位置:首页 » 密码管理 » c控件跨线程访问

c控件跨线程访问

发布时间: 2023-04-15 16:20:53

1. C# 跨线程调用窗体控件

Read()函数性能太低了,阻塞了电子眼触发函数,你需要转变下思路,使用异步队列来处理电子眼数据与UI之间的同步。即:

  1. DI_Tick把电子眼数据存储tagReads[]存储到异步队列中

  2. 新建一个线程轮蠢孝闹询异步队列,如果有数据则使用MethodInvoker跨线程绑定UI,之后从队列移除这部分数据。

你现在的代码,电子眼收听函数DI_Tick是运行在UI线程的,这就造成了一旦UI线程忙慎仔碌,则你的电子眼收听就阻塞了,所以需要使用一个异步队列,把UI的更新和电子眼的带罩数据接收两部分工作隔离开来。

2. c#(wince)跨线程同时访问多个控件怎么弄啊网上给的例子都只有一个textbox,当同时很多的时侯怎么弄。

界面卡的芹纳原因是UI线程一直在给textbox赋蔽携值,因为this.invoke方法把给textbox赋值的代码从新开的线程放到UI线程上执行。让新线程休眠一下应该能解决界面卡的问题。
while(true)
{
n++;

test();

Thread.Sleep(200); /宏首伏/循环一次则新线程休眠0.2秒

}

3. C++ MFC跨线程调用控件会出问题吗

线程调用函数是可以的.
不过需要注意,跨线程调用的函数中,如果使用了全局变量或者静态局部变量, 或者动态申请的资源.
或者在该函数调用的函数中使用了这类资源
那么会出现线程不安全现象,需要加锁.

4. c# 跨线程访问控件

用委托,具体代码如下~:
public delegate void MyInvoke(string str);

private void button9_Click(object sender, EventArgs e)
{
//_myInvoke = new MyInvoke(SetText);
// = false;
Thread t = new Thread(new ThreadStart(fun));
t.Start();
}

private void fun()
{
//_myInvoke("dddd");
SetText("ddd");
}
private void SetText(string s)
{
if (textBox6.InvokeRequired)
{
MyInvoke _myInvoke = new MyInvoke(SetText);
this.Invoke(_myInvoke, new object[] { s });
}
else
{
this.textBox6.Text = s;
}
}

5. winform 如何跨线程访问

//第一步:定义一个委托
publicdelegatevoidMyInvoke(boolchecked);

privatevoidbutton_Click(objectsender,EventArgse)
{
//第二步:启动一个后台线程
Threadt=newThread(newThreadStart(fun));
t.IsBackground=true;
t.Start();
}
//这个是后台线程函数
privatevoidfun()
{
//SetChecked方法从后台线程访问窗体
SetChecked(false);
}

privatevoidSetChecked(boolchecked)
{
//第三步:检测是否需要跨线程调用
if(checkbox.InvokeRequired)
{
//需要跨线程
纳茄//第四步:利用委托和Invoke方法实现跨线程调用
明并MyInvoke_myInvoke=newMyInvoke(SetChecked);
this.Invoke(_myInvoke,newobject[]{checked});
}
else
{
//不需要跨线程
//直接存取、修改窗体控件
洞槐察this.checkbox.Checked=checked;
}
}

6. c#如何跨线程调用窗体控件

要从其他跨线程存取调用控件,可采用以下两种方法之一:

方法1)不进行线程安全的检查

方法2)通过委托的方式

代码如下所示

publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
//方法1:不进行跨线程安全检查
//System.Windows.Forms.Control.=false;
}

privatevoidbutton1_Click(objectsender,EventArgse)
{
Threadth1=newThread(newThreadStart(CalNum));
th1.Start();
}

privatevoidCalNum()
{
//button1.Enabled=false;

intresult=0;
for(inti=1;i<100000000;i++)
{
result+=i;
}

SetCalResult(result);

//button1.Enabled=true;
}

//方法2:检查是否跨线程,然后将方法加入委托,调用委托
(intresult);
privatevoidSetCalResult(intresult)
{
if(label2.InvokeRequired==true)
{
SetTextHandlerset=newSetTextHandler(SetCalResult);//委托的方法参数应和SetCalResult一致
label2.Invoke(set,newobject[]{result});//此方法第二参数用于传入方法,代替形参result
}
else
{
label2.Text=result.ToString();
}
}
}
热点内容
安卓怎么快速多选手机桌面图标 发布:2025-02-13 06:21:51 浏览:298
androidia安装 发布:2025-02-13 06:12:14 浏览:12
jsmcc文件夹 发布:2025-02-13 06:11:26 浏览:170
算法与程序设计教案 发布:2025-02-13 06:10:51 浏览:55
ftp登录需要输入用户名和密码 发布:2025-02-13 06:03:33 浏览:398
数控编程代表 发布:2025-02-13 05:58:51 浏览:385
编程凸轮 发布:2025-02-13 05:38:21 浏览:691
判断素数的编程 发布:2025-02-13 05:29:25 浏览:618
androidaes加密 发布:2025-02-13 05:08:36 浏览:493
李宗瑞文件夹 发布:2025-02-13 04:27:59 浏览:611