Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在父窗体运行时处理子窗体中的事件_C#_Multithreading_Mdi - Fatal编程技术网

C# 在父窗体运行时处理子窗体中的事件

C# 在父窗体运行时处理子窗体中的事件,c#,multithreading,mdi,C#,Multithreading,Mdi,假设我在MDI Windows窗体应用程序中将Form1作为父级。 它有一个btnStart按钮,可以简单地进行大量计算,比如: double i; while(blnContinue) { i=(i+1)%100000; } Form2是一个带有btnStop按钮的子级,该按钮只指定blnContinue=false;使while循环中断 但关键是,按下btnStop时,Form2无法引发事件 在这种情况下,将包含while循环的函数设置为单独的线程并以父表单创建btnStop是很简单的 但

假设我在MDI Windows窗体应用程序中将Form1作为父级。 它有一个btnStart按钮,可以简单地进行大量计算,比如:

double i;
while(blnContinue)
{
i=(i+1)%100000;
}
Form2是一个带有btnStop按钮的子级,该按钮只指定blnContinue=false;使while循环中断

但关键是,按下btnStop时,Form2无法引发事件

在这种情况下,将包含while循环的函数设置为单独的线程并以父表单创建btnStop是很简单的

但是我必须在主线程中执行“无限”while循环,所以我不允许这样做 把它做成一根线,然后开始/停止

有人知道如何处理Form2事件吗?
提前谢谢

您需要调用循环内的Application.DoEvents,比如说每100ms调用一次。我认为没有其他选择。否则,你的整个应用程序都会被锁定,任何地方都不会触发任何事件,因此没有机会做任何事情。有什么东西阻止你使用另一个线程吗?

谢谢你的回答。我会试试,虽然我不确定这会不会影响性能。。。我必须在主线程中执行它,因为我在使用单独的驱动程序时出错,现在我必须检查它是否在主线程中工作。。。。