我在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 ;
}
答案 0 :(得分:1)
我建议不要使用Thread本身。相反,您应该使用BackgroundWorker,或者如果您要定位.Net 4.5使用异步库。 您可以在MSDN中找到有关README和BackgroundWorker的大量有用信息。
这些应该足以让你开始。