用户控件在主窗体中使用多线程

.Net技术 码拜 7年前 (2017-04-28) 1425次浏览
问题描述:
1. 有1个用户控件(简称UC),上面有一个按钮(简称BTN)
2. 在另外的程序主窗口(简称MF)中使用了该用户控件(UC)
3.用户控件中在点击按钮后显示某值
特殊情况:
在主窗口中点击用户控件按钮,开启一个线程,等待符合条件的数据,假如符合,则停止该线程,并把结果在用户控件中显示
目前 原因是要让主窗体可以在点击用户按钮时,添加代码,就把按钮点击写成了一个事件,在主窗体中使用时,在该事件中新建一个线程,等待输入值。但是接下来却不知道怎么实现…
讨教各位怎么样实现?或是本人的思路有不正确
解决方案

5

引用:

问题描述:
1. 有1个用户控件(简称UC),上面有一个按钮(简称BTN)
2. 在另外的程序主窗口(简称MF)中使用了该用户控件(UC)
3.用户控件中在点击按钮后显示某值
特殊情况:
在主窗口中点击用户控件按钮,开启一个线程,等待符合条件的数据,假如符合,则停止该线程,并把结果在用户控件中显示
目前 原因是要让主窗体可以在点击用户按钮时,添加代码,就把按钮点击写成了一个事件,在主窗体中使用时,在该事件中新建一个线程,等待输入值。但是接下来却不知道怎么实现…
讨教各位怎么样实现?或是本人的思路有不正确

假如是本人的话。本人会再主窗口增加一个事件。就是符合条件的事件。然后另外一个窗口添加对主窗口事件的关注。当然他应该知道主窗口。然后就可以实现这个功能了。

5

引用:

这个好像不怎么好编辑问题描述

其实就是另外一个窗口在创建的时候,对主窗口事件的关注。
感觉题主对这块不是很熟悉。可以本人先从头写个事件。应该就差不多了。
这个好像就是控制反转。 你先实现,另外一个窗口,对主窗口点击事件的关注。然后写一个本人的事件。然后改成对这个事件的关注。

5

等待到符合条件的输入值后执行回调函数。

5

子窗体回调主窗体中的用于刷新数据的方法,执行后回调用子窗体中用于绑定数据源的方法。

5

线程无法直接调用主线程创建的控件,也就是说你没办法直接在子线程中给主线程的控件赋值。
解决这个问题有两个办法:
1.在Form_Load事件中加上 CheckForIllegalCrossThreadCalls = false;   不捕获线程
2.使用 Invoke 函数,如:
this.Invoke(new Action(() =>
{
label1.Text=”子线程传值”;
}));
其中 new Action(() =>  { } ) 为 拉姆达表达式

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明用户控件在主窗体中使用多线程
喜欢 (0)
[1034331897@qq.com]
分享 (0)