C#表单挂多线程修复

时间:2016-02-26 15:49:17

标签: c# multithreading background hang

我在C#中使用Windows窗体,当我点击我的按钮时,我的方法正在对word文件和pdf文件进行操作。但是当事情发生时,表格会挂起(平均时间是5分钟,看起来非常糟糕)。我正在考虑使用多线程来解决问题,我想为它分配更多的处理能力和ram。

这是线程方法,但它不起作用

  Thread oThread = new Thread(AwesomeMethod (wfile,a));
   oThread.Start(this); 
 System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

编辑1:

我正在尝试使用backgorundworker,但它没有调用我的方法。

      private void createToolStripMenuItem_Click(object sender, EventArgs e)
    {
        ofd.Filter = ".docx |*.DOCX";
        if (ofd.ShowDialog() == DialogResult.OK)
        {
            pictureBox2.Visible = true;

            worker2 = new BackgroundWorker();
            worker2.WorkerReportsProgress = true;
            worker2.WorkerSupportsCancellation = true;
            worker2.DoWork += (obj, ea) => smallworker();
            worker2.RunWorkerAsync();
         //  Thread demoThread = null;
          //  demoThread = new Thread(new ThreadStart(smallworker()));

           // demoThread.Start();

            //smallworker();

            // var process = System.Diagnostics.Process.Start("WINWORD.exe");
            //process.WaitForExit(); 

            button2.Enabled = true;



        }

    }
    private void smallworker()
    {
        var fileName = ofd.FileName;

        tabPage8.Text = ofd.SafeFileName;

        // file.CopyTo(ofd.FileName);
        string pdfname = ofd.SafeFileName.Replace(".docx", " PPO .pdf");
        string pdfpath = spdf + "/ " + pdfname;
        string DOCXpath = spdf + "/ " + ofd.SafeFileName;
        try
        {
            System.IO.File.Copy(fileName, DOCXpath);
            wordtopdf(DOCXpath, pdfpath);
        }
        catch
        {
            MessageBox.Show("File Already in the folder");
        }

        perform_search(ofd.FileName);
        dt_test();


        _TODELETE_.Add(DOCXpath);
        _TODELETE_.Add(pdfpath);
        pictureBox2.Visible = false ;
    }         

1 个答案:

答案 0 :(得分:1)

我建议不要使用Thread本身。相反,您应该使用BackgroundWorker,或者如果您要定位.Net 4.5使用异步库。 您可以在MSDN中找到有关READMEBackgroundWorker的大量有用信息。

这些应该足以让你开始。