c# 多线程 问题

希望达到这样的效果。
一个窗体A,上面有按钮,这个按钮执行的事件需要时间比较长,所以希望在处理的同时启动线程th,让th打开等待窗口B。这时候B上的确定按钮为不可用。希望在A处理完后传过去一个值Isfinished,通过判断这个值使B上的确定按钮可用。求教

这个很好做的,方法也很多,下面是你要的那种方法,建议这种用异步委托回调,或者自己定义事件的方式都比这个要好,我以前回答过类似的,你可以参考着看看:
http://zhidao.baidu.com/question/76232940.html

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
Form2 f2=new Form2();
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(this.StartWork));
f2.Show();
t.Start(f2);
}

private void StartWork(object f2)
{
//do work

Form2 f = (Form2)f2;
f.ChangeButtonState();
}
}

public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private void Form2_Load(object sender, EventArgs e)
{
this.button1.Enabled = false;
}

public void ChangeButtonState()
{
this.button1.Invoke(new MethodInvoker(delegate { this.button1.Enabled = true; }));
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-11-25
这个东西不好弄啊 因为两个窗体之间是不能相互操作的
第2个回答  2008-11-25
A在启动线程的时候把B窗体按钮设置为不可用,等A线程执行完在设置B窗口按钮可用就可以了啊,把B窗口按钮改为公有的,以便让A窗口访问这个按钮,

多线程保存文件报错c#
请问你是想问“多线程保存文件报错c#是怎么回事”吗?该问题的原因有:文件访问冲突、文件访问冲突。1、文件访问冲突:当多个线程试图同时写入同一个文件时,会出现竞争条件。如果两个线程试图在同一时间写入文件的相同部分,会导致数据损坏或者写入的数据不完整。为了解决这个问题,可以使用文件锁(FileLock...

C#中的多线程问题用于什么地方?怎么掌握?
1.每个窗体都有自己的都在不同的线程上运行,如果需要在窗体之间交互,就需要在线程之间交互。2.当线程Sleep时,系统就退出执行队列一段时间,当睡眠结束时,系统会产生一个时钟中断,从而 使线程回到执行队列中,从而恢复线程的执行。3.如果父线程先于子线程结束,那么子线程将在父线程结束的同时被迫结...

C#中的多线程超时处理实践
最近处理C#中timeout行为的bug,解决方案涉及多线程超时处理。首先,创建了一个类来处理超时操作。定义了`OperationHandler`类,包含`IOperation`接口实例和`StartWithTimeout`方法,用于在超时后执行操作,以及`StopOperationIfNotStartedYet`方法,用于在超时期间停止操作。接着,实现了一个操作类`MyOperation...

C#网络编程与多线程的疑问,求指点
private void btnStart_Click(object sender, EventArgs e) { bg.RunWorkerAsync(); } \/\/线程暂停,如果不需要暂停就不用,这里只是说明用法 private void btnStop_Click(object sender, EventArgs e) { bg.CancelAsync(); } \/\/窗体关闭时,停止线程 protected override...

c# 多线程的小问题
多线程可以有效的并发。对于包含不同任务的程序,可以考虑每个任务使用一个线程。这样的程序在设计上相对于单线程做所有事的程序来说,更为清晰明了,比如生产、消费者问题。在实际的开发中对于性能优化的问题需要考虑到具体的场景来考虑是否使用多线程技术。也就是说线程和效率不是成正比对应的 ...

C#多线程问题
一、局域网模式 1、服务器启动监听端口;2、客户端向服务发出连接请求,同时创建一个随机监听端口,并进行监听;3、服务器接收到连接请求后创建一个连接,进行基本消息验证,验证通过,读取消息协议中客户端的IP和随机端口,向客户端发出连接请求,同时释放服务器端监听创建的连接,以便处理下一个监听;4、...

初学C#,现有 多线程处理数据问题: 有1000条记录,每条记录都要这样处理...
额,对于你的问题我只能这么说,使用多线程不但不会提升处理速度,而且会降低数据处理速度!记住,是一定会降低处理速度!你要明白多线程的作用是异步处理,而不是提高速度(哪怕你的cpu是一万核的也白搭,那只能说明你电脑的处理性能很高),因为所谓多线程其实是“伪线程”,创建越多的线程,则会越多...

C#怎么开辟多线程,要是多了是否会出错,出错了怎么办?
开辟多线程的方法如上。而至于多线程可能产生的错误,最有可能的原因是多线程对公共资源的同时访问导致的错误。为了解决这个问题,可以使用加锁、监视器、互斥体等方法,可避免多线程对公共资源同时访问产生的问题。加锁:lock(expression(加锁对象)){statement block(正在访问共享资源的程序段)} 如此可...

C# 多线程问题
你的这个问题还真不好处理,线程套线程,还想等待全部完成,如果不想改设计的话,就使用ManualResetEvent这个对象,每次线程创建子线程时,都创建这个对象,保证所有的线程都执行完毕再将阻塞放开。(可采用计数方式,开始记录需要创建多少个线程,再记录一个变量(原子型)每个子线程完成时都将变量值加1,...

C#中的多线程问题,为什么带参数的方法不行,不带参数的可以?
threadstart的参数是一个函数指针,这个指针是要传递个thread的一个内部函数执行的(那个函数才是真正意义的线程),你自己的函数只是传递给人家,人家调用进去,该函数指针的类型就是没有参数,没有返回值的,你的线程函数必须类型相同,指针类型不同肯定不行的。。。

相似回答
大家正在搜