ZDL男人海洋 2016-01-19 16:21 采纳率: 100%
浏览 2119
已采纳

C# click事件 多线程 异步 耗时 操作UI

listbox做了个目录(单层),点击一条就在另一个控件加载相应的内容。这个加载过程是耗时操作。
所以考虑用异步,在click处理函数里开了子线程。因为需要操作UI,所以在子线程里调用invoke,但是无论使用invoke还是beginInvoke,那个加载内容的函数都是在UI线程上执行。这样就会造成UI线程阻塞。
想实现的效果是,一次点击之后马上能响应下一次点击同时把上一次点击的加载线程结束掉而执行当前点击的加载线程。或者在下一次点击的时候判断上一次是否加载完成,如果没完成则提示,等待完成。
哪位熟悉这个的有什么好办法?

  • 写回答

3条回答

  • wszde2 2016-01-20 00:59
    关注

    如果原线程仍在执行的话是无法立即结束掉的,因为C#是托管代码,需要通知真正的线程执行单元结束自己要花掉很长时间所以你的方法一不太好用。
    方法二只需要声明一个全局的线程对象在点击时间发生后判断下当前线程状态就行了。
    当前工作线程如果要调用UI线程显示数据的话用这样的语法:
    工作线程:
    {
    Action act = ()=>{textBox1.Text = "1"};
    textBox1.Invoke(act);
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。