Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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#windows应用程序在启动大for循环进程时停止工作_C#_Windows Applications - Fatal编程技术网

C#windows应用程序在启动大for循环进程时停止工作

C#windows应用程序在启动大for循环进程时停止工作,c#,windows-applications,C#,Windows Applications,我的程序在进入for循环时停止工作,我用Application.DoEvents()解决了它;但是它真的会减慢程序的速度我怎么才能解决呢 for (int b = 10011000; b < 99999999; b++) { //code if (//condition ) { try { ///////

我的程序在进入for循环时停止工作,我用Application.DoEvents()解决了它;但是它真的会减慢程序的速度我怎么才能解决呢

for (int b = 10011000; b < 99999999; b++)
        {
            //code

            if (//condition )
            {



                try
                {
        ///////

                }


                catch
                {
          //////
                }
            }
            else
            {
        //////
            }
            Application.DoEvents();

        }
for(int b=10011000;b<9999999;b++)
{
//代码
if(//条件)
{
尝试
{
///////
}
抓住
{
//////
}
}
其他的
{
//////
}
Application.DoEvents();
}

好的,使用
Application.DoEvents()
从来都不是最好的方法

我建议将循环放在它自己的函数中,然后在它自己的线程上调用它。这样,当您的循环执行它的任务时,UI线程将保持单独运行。如果您想做一些研究并决定哪种方法最适合您的情况,还可以使用其他方法,例如使用
任务
回调
异步
方法

大概是这样的:

Thread backgroundThread = new Thread(()=>myLoopMethod));
backgroundThread.Start();
Task task = new Task( () => { /* your code */ } );
task.Start();
或:


虽然我目前没有访问IDE的权限来检查语法。

好的,使用
Application.DoEvents()
从来都不是最好的方法

我建议将循环放在它自己的函数中,然后在它自己的线程上调用它。这样,当您的循环执行它的任务时,UI线程将保持单独运行。如果您想做一些研究并决定哪种方法最适合您的情况,还可以使用其他方法,例如使用
任务
回调
异步
方法

大概是这样的:

Thread backgroundThread = new Thread(()=>myLoopMethod));
backgroundThread.Start();
Task task = new Task( () => { /* your code */ } );
task.Start();
或:


尽管我目前没有访问IDE的权限来检查语法。

这是一个非常密集的for循环。你为什么不改用模型呢

MSDN在使用此DoEvents时也会提交一份标书


您的案例似乎是一个很好的备选方案,可以进行异步执行。

这是一个非常密集的for循环。你为什么不改用模型呢

MSDN在使用此DoEvents时也会提交一份标书


您的案例似乎很适合异步执行。您需要在其他线程或任务上运行它

像这样:

Thread backgroundThread = new Thread(()=>myLoopMethod));
backgroundThread.Start();
Task task = new Task( () => { /* your code */ } );
task.Start();
通过这段代码,您的应用程序永远不会停止,但不要忘记更改您需要调用的UI参数

this.Invoke(new Action(() => { /*your code*/ }));
有关更多信息,请查看以下链接:

更新

为了提高代码的速度,最好使用parallel.for。 这个链接是什么

`

使用系统;
使用系统线程;
使用System.Threading.Tasks;
命名空间并行
{
班级计划
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“使用C#For循环\n”);
对于(int i=0;i
{
WriteLine(“i={0},thread={1}”,i,
Thread.CurrentThread.ManagedThreadId);
睡眠(10);
});
Console.ReadLine();
}
}
}`

您需要在其他线程或任务上运行它

像这样:

Thread backgroundThread = new Thread(()=>myLoopMethod));
backgroundThread.Start();
Task task = new Task( () => { /* your code */ } );
task.Start();
通过这段代码,您的应用程序永远不会停止,但不要忘记更改您需要调用的UI参数

this.Invoke(new Action(() => { /*your code*/ }));
有关更多信息,请查看以下链接:

更新

为了提高代码的速度,最好使用parallel.for。 这个链接是什么

`

使用系统;
使用系统线程;
使用System.Threading.Tasks;
命名空间并行
{
班级计划
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“使用C#For循环\n”);
对于(int i=0;i
{
WriteLine(“i={0},thread={1}”,i,
Thread.CurrentThread.ManagedThreadId);
睡眠(10);
});
Console.ReadLine();
}
}
}`

在windows窗体中,您可以使用
BackgroundWorker
在不阻塞UI的情况下执行后台任务。别忘了接受我的答案;-)
已停止工作
,原因是未处理主窗口的消息队列。这是因为gui线程正在执行for循环。就像@AlessandroD'Andria说的,使用。或者在windows窗体中,您可以使用
BackgroundWorker
在不阻塞UI的情况下创建后台任务。别忘了接受我的答案;-)
已停止工作
,原因是未处理主窗口的消息队列。这是因为gui线程正在执行for循环。就像@AlessandroD'Andria说的,使用。或者tnx很多我会这样做实际上我不需要UI在它启动太多进程后我只想让程序做它的工作tnx很多我会这样做实际上我不需要UI在它启动太多进程后我只想让程序做它的工作tnx它的工作完成了,但它真的很慢我如何加速它使用并行。为此,它会加速你的代码表更新答案,别忘了接受;-)tnx它可以完成任务,但速度太慢了。我如何提高速度使用并行程序。为此,它将加快您的代码的速度观看答案的更新,别忘了接受它;-)