
C# 如何创建一个独立的子窗口
程序有个主窗口A,有时会打开一个子窗口B。子窗口B上面有些复杂的运算工作,执行期间子窗口B就卡死了不能动,同时主窗口A也被连累到一起卡死。请问,如何创建一个独立线程的子窗...
程序有个主窗口A,有时会打开一个子窗口B。
子窗口B上面有些复杂的运算工作,执行期间子窗口B就卡死了不能动,同时主窗口A也被连累到一起卡死。
请问,如何创建一个独立线程的子窗口B,使得它不会连累到主窗口A,在计算期间窗口A也可以正常操作。 展开
子窗口B上面有些复杂的运算工作,执行期间子窗口B就卡死了不能动,同时主窗口A也被连累到一起卡死。
请问,如何创建一个独立线程的子窗口B,使得它不会连累到主窗口A,在计算期间窗口A也可以正常操作。 展开
4个回答
展开全部
在子窗口b放一个属性
public
form
mainform;
在子窗口a需要打开子窗口b的时候给mainform赋值
子窗口b
form=new
子窗口b();
form.mainform=this;
form.show();
最后双击datagriedwiew里一条数据记录的时候
写上:
(mainform
as
子窗口a).textbox1.text="你要显示的职";
注意子窗口a的textbox一定要是公有的
modifiers属性设置为public
public
form
mainform;
在子窗口a需要打开子窗口b的时候给mainform赋值
子窗口b
form=new
子窗口b();
form.mainform=this;
form.show();
最后双击datagriedwiew里一条数据记录的时候
写上:
(mainform
as
子窗口a).textbox1.text="你要显示的职";
注意子窗口a的textbox一定要是公有的
modifiers属性设置为public
展开全部
using (EventWaitHandle ev1 = new EventWaitHandle(false, EventResetMode.ManualReset))
using (EventWaitHandle ev2 = new EventWaitHandle(false, EventResetMode.ManualReset))
{
Form2 f;
ThreadStart ts = new ThreadStart(delegate()
{
f = new Form2();
ev2.Set();
ev1.WaitOne();
ev2.Set();
Application.Run(f);
});
Thread thread = new Thread(ts);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
ev2.WaitOne();
ev2.Reset();
//这里对f做一些初始化工作
//如果你有要对f的什么成员进行赋值,放在这里
ev1.Set();
ev2.WaitOne();
}
不过这样的话子窗口就不再是子窗口了,它是一个独立的窗口,和A没有关系
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
窗口B是不可能在独立线程上跑的,因为他是A窗口打开的,所以B会在UI线程上运行。
这有一个折中的方案,在窗口B上用Thread运行你的复杂计算工作,期间如果计算会影响到窗口,就使用invote回调,基本就能解决你的问题。
这有一个折中的方案,在窗口B上用Thread运行你的复杂计算工作,期间如果计算会影响到窗口,就使用invote回调,基本就能解决你的问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
//这是在第一个窗体的代码
private void btnShowForm_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(ThreadProc));
t.Start();
}
public static void ThreadProc()
{
Form2 form = new Form2();//第二个窗体
form.ShowDialog();
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询