如何在后台运行进程?c#
我在应用程序中使用如何在后台运行进程?c#,c#,pdf,process,backgroundworker,wkhtmltopdf,C#,Pdf,Process,Backgroundworker,Wkhtmltopdf,我在应用程序中使用wkhtmltopdf进行报告。然而,它的工作原理和预期的一样好 问题- 在下面的方法中,我正在将源字符串转换为pdf并写入字节 注意- 在读取所有字节并尝试运行进程之前,我正在启动进程。 主要问题是运行此进程的后台能力。我无法在后台运行此进程 目前的情况是,直到pdf没有生成,整个应用程序才会进入暂停模式。这与后台进程不工作有关 如何修改此过程,使其在后台工作而不停止应用程序 我读过关于任务工厂和多线程的文章,但我没有得到线索 pdf转换方法- 在这个方法中,我调用的是pd
wkhtmltopdf
进行报告。然而,它的工作原理和预期的一样好
问题-
在下面的方法中,我正在将源字符串转换为pdf并写入字节
注意-
在读取所有字节并尝试运行进程之前,我正在启动进程。
主要问题是运行此进程的后台能力。我无法在后台运行此进程
目前的情况是,直到pdf没有生成,整个应用程序才会进入暂停模式。这与后台进程不工作有关
如何修改此过程,使其在后台工作而不停止应用程序
我读过关于任务工厂和多线程的文章,但我没有得到线索
pdf转换方法-
在这个方法中,我调用的是pdf方法-
ConverToPdf(content,Server.MapPath(“~/pdf/”)
注意-
我请求上面的
ConverToPdf
方法与后台工作线程通信。使用线程类它将在后台线程而不是主线程中运行您的方法。
更重要的是,在方法中返回null,因此最好使返回类型为void,而不要返回null
Thread threadObj = new Thread(new ThreadStart(()=>ConverToPdf("a","b")));
threadObj.Start();
更新:我假设您使用的是windows窗体。根据您的更新,您可以很容易地看到您的主方法需要进一步执行响应。现在,我建议您在后台线程中显示一些进度条,这样我就不会停止应用程序。当
converttoPDF
方法完成时,进程停止进度条。在这种情况下,您的应用程序不会被卡住,您将获得所需的响应。将其设为返回类型void对我没有帮助。因为在那里,它需要从调用它的地方通信回方法。但是为什么要再次与该方法通信呢?简单一点,你会觉得你的逻辑有点混乱。如果希望响应进一步执行,而不是在后台线程中运行该方法,或者如果希望在后台线程中运行,则表示主线程不需要响应进一步执行。我希望你明白我的意思。我的问题搞错了。让我更新一下,以获得更多的理解
private void Button1_Click(object sender, EventArgs e)
{
bgworker.RunWorkerAsync();
}
private void bgworker_DoWork(object sender, DoWorkEventArgs e)
{
ConverToPdf(source, commandLocation);
}
Thread threadObj = new Thread(new ThreadStart(()=>ConverToPdf("a","b")));
threadObj.Start();
private void Button1_Click(object sender, EventArgs e)
{
bgworker.RunWorkerAsync();
}
private void bgworker_DoWork(object sender, DoWorkEventArgs e)
{
ConverToPdf(source, commandLocation);
}