栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

线程控制调用

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

线程控制调用

Windows窗体中有两个黄金线程规则:

  • 除了创建控件的“句柄”的线程(通常只有一个UI线程)之外,不要触摸任何线程的任何控件属性或方法(除了明确列出的那些都可以)
  • 不要在相当长的时间内阻塞UI线程,否则会使应用程序无响应

为了与来自其他线程的UI进行交互,您需要使用委托并调用

Control.Invoke
/ 来“整理”对UI线程的调用
BeginInvoke
。您 可以
测试是否需要
Invoke
使用该
InvokeRequired
属性进行调用,但是这些天我个人还是倾向于这样做-不需要时调用没有太多的惩罚。

C#3中的Lambda表达式(或C#2中的匿名方法)也使这更加令人愉悦。

例如,您可以使用:

cbFly.Invoke((MethodInvoker)(() => cbFly.Items.Clear()));

所有方括号都有点阻碍,因此,如果您使用的是C#3,则可能需要添加这样的扩展方法:

public static void Invoke(this Control control, MethodInvoker action){    control.Invoke(action);}

然后,您可以执行以下操作:

cbFly.Invoke(() => cbFly.Items.Clear());

这很简单。通常,您可以

MethodInvoker
通过捕获需要在委托中访问的任何变量来使用a 。

有关更多详细信息,请参见我的线程教程或Joe
Albahari的

作为第二件事,我看到您正在使用

Thread.Abort
-实际上是在您自己的线程上使用,尽管它之后还有其他调用。为什么?中止任何线程 其他
比你自己是一个“只有紧急”呼叫类型(这通常应遵循由应用正在反正卸载),我看不出有任何理由要中止当前线程时仍有待以后完成的工作。 ..



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/376258.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号