Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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#_Pdf_Process_Backgroundworker_Wkhtmltopdf - Fatal编程技术网

如何在后台运行进程?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);
        }