C# 在第一个方法使用线程功能c完成后启动第二个方法#

C# 在第一个方法使用线程功能c完成后启动第二个方法#,c#,multithreading,methods,status,C#,Multithreading,Methods,Status,我有一个方法,就是重建一个网店的产品目录。在我更改一些产品信息后,这是必要的。在重建方法之后,我想启动第二个方法来生成webshop的全文索引。我可以查看第一个方法(RebuildCatalog)的状态。如果状态为“RebuildFinished”,那么我想启动第二个方法(GenerateFileTextIndex)。我想使用线程功能。是否有人可以创建一个如何实现此场景的示例 我想使用线程功能 听起来你真的不像。一种方法接着一种方法的启动非常简单: var status = RebuildCat

我有一个方法,就是重建一个网店的产品目录。在我更改一些产品信息后,这是必要的。在重建方法之后,我想启动第二个方法来生成webshop的全文索引。我可以查看第一个方法(RebuildCatalog)的状态。如果状态为“RebuildFinished”,那么我想启动第二个方法(GenerateFileTextIndex)。我想使用线程功能。是否有人可以创建一个如何实现此场景的示例

我想使用线程功能

听起来你真的不像。一种方法接着一种方法的启动非常简单:

var status = RebuildCatalog();
if (status == Status.RebuildFinished)
{
    GenerateFullTextIndex();
}
不需要穿线。如果你真的认为你需要多个线程,你应该解释为什么你认为它们会有帮助。您需要在什么时候同时执行多个任务

我想使用线程功能

听起来你真的不像。一种方法接着一种方法的启动非常简单:

var status = RebuildCatalog();
if (status == Status.RebuildFinished)
{
    GenerateFullTextIndex();
}

不需要穿线。如果你真的认为你需要多个线程,你应该解释为什么你认为它们会有帮助。在什么时候您需要同时执行多个任务?

正如我从您的问题中可以假设的那样,您的重建方法可能会占用大量时间,这就是为什么您希望在单独的线程中运行。因此,我建议实施。当您的重建(异步)方法完成时,它将抛出带有AsyncCompletedEventArgs的finished事件(您可以将其子类化以传递结果状态)然后,您将开始第二种方法。

正如我从您的问题中可以假设的那样,您的重建方法可能会占用相当多的时间,这就是您希望在单独的线程中运行的原因。因此,我建议实施。当您的重建(异步)方法完成时,它将抛出带有AsyncCompletedEventArgs的finished event(您可以将其子类化以传递结果状态),然后您将从那里开始第二个方法。

如果您想使用多个线程并在链中组织调用,以便它们在另一个线程上按顺序执行,如果您使用的是
.netframework4.0>
,则可以使用,例如使用方法

示例(来自MSDN的预udocode):

Task getData=新任务(()=>GetFileData());
Task analyzeData=getData.ContinueWith(x=>Analyze(x.Result));
任务报告数据=分析数据。继续(y=>总结(y.Result));
getData.Start();
//或者。。。
Task reportData2=Task.Factory.StartNew(()=>GetFileData())
.ContinueWith((x)=>分析(x.结果))
.继续((y)=>总结(y.结果));

好的,如果您想使用多线程并在链中组织调用,以便它们在另一个线程上按顺序执行,并且您正在使用
.NET Framework 4.0>
,那么您可以使用,例如使用方法

示例(来自MSDN的预udocode):

Task getData=新任务(()=>GetFileData());
Task analyzeData=getData.ContinueWith(x=>Analyze(x.Result));
任务报告数据=分析数据。继续(y=>总结(y.Result));
getData.Start();
//或者。。。
Task reportData2=Task.Factory.StartNew(()=>GetFileData())
.ContinueWith((x)=>分析(x.结果))
.继续((y)=>总结(y.结果));

使用事件似乎比查看状态更简单

在重建目录代码中,在完成时触发“已完成”事件:

public event EventHandler<EventArgs> RebuildFinished;

private void Rebuild(...)
{
    // Rebuild the catalog

    this.RebuildFinished(this, new EventArgs(...));
}
现在,它们都可以(也可能应该)使用线程来确保应用程序的UI保持响应:

this.catalogThread = new Thread(new ThreadStart(this.catalog.Rebuild));

使用事件似乎比观察状态更简单

在重建目录代码中,在完成时触发“已完成”事件:

public event EventHandler<EventArgs> RebuildFinished;

private void Rebuild(...)
{
    // Rebuild the catalog

    this.RebuildFinished(this, new EventArgs(...));
}
现在,它们都可以(也可能应该)使用线程来确保应用程序的UI保持响应:

this.catalogThread = new Thread(new ThreadStart(this.catalog.Rebuild));

因为当我执行重建方法时,它会在完成时花费很多时间(例如1分钟)。我不想在网站上等待。我只想按下“重建目录”按钮。然后我希望方法1在后台启动,当方法1完成时(我可以检查重建的状态),我希望启动方法2(生成全文索引)。我希望您能理解我的情况。@user1326231:听起来您希望两个调用都在同一个新线程上?因为当我执行重建方法时,完成后要花费很多时间(例如1分钟)。我不想在网站上等待。我只想按下“重建目录”按钮。然后我希望方法1在后台启动,当方法1完成时(我可以检查重建的状态),我希望启动方法2(生成全文索引)。我希望您能理解我的情况。@user1326231:听起来您希望两个调用都在同一个新线程上?