【发布时间】:2014-09-12 15:15:10
【问题描述】:
当代码运行如此滞后时,它会非常好,这样它在运行时就不会出现滞后。
代码的工作原理:
它会在计算机中搜索文件,然后在找到它时更改文件,但如果文件正在运行,则行将循环,直到它设法完成其工作。
主类
public Form1(string[] Args)
{
InitializeComponent();
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(1000); // One second.Thread.Sleep(1000); // One second.
MessageBox.Show("Testing");
Fille mc = new Fille();
mc.Search();
}
填充类
private static ArrayList list2 = new ArrayList();
private static ArrayList listRemove = new ArrayList();
public void Search()
{
try
{
foreach (string file in Directory.EnumerateFiles(@"C:\Users\user\Downloads\MCFILE\trrtrt\", "*.exe", SearchOption.AllDirectories))
{
// Display file path.
if (SHA1Hash.GetSHA1Hash(file) == "1233456") // fake SHA1Hash
{
try
{
COPYWithReplace(@"C:\Users\user\Downloads\MCFILE\Fake2\Test.exe", file);
}
catch (IOException)
{
// log errors
if (list2.Count == 0)
{
list2.Add(file);
Thread thread = new Thread(new ThreadStart(Test2));
thread.Start();
}
else
{
Thread thread = new Thread(new ThreadStart(Test2));
thread.Abort();
list2.Add(file);
thread.Join();
}
}
}
}
}
catch (Exception ex)
{
// log errors
}
}
private void Test2()
{
if (list2.Count == 0)
{
}
else
{
foreach (string _item in list2)
{
try
{
//Run
COPYWithReplace(@"C:\Users\user\Downloads\MCFILE\Fake2\Test.exe", _item);
listRemove.Add(_item);
}
catch (IOException)
{
//error
}
}
foreach (var Remove in listRemove)
{
list2.Remove(Remove);
}
listRemove.Clear();
if (list2.Count == 0)
{
}
else
{
Thread thread = new Thread(new ThreadStart(Test2));
thread.Start();
}
}
}
因为我发现了问题,所以我创建了一个新线程。但现在只是滞后了。
【问题讨论】:
-
你说的滞后是什么意思?您是否尝试过任何方法来找出问题所在?
-
滞后循环。 foreach
-
当再次循环这段代码然后滞后它。 Test2() ---> foreach
-
我想也许我可以通过阅读代码来了解您要做什么,因为您的问题难以理解。但在这种情况下,您的代码比您的文本描述更加复杂。你能用语言告诉我们你想要完成什么,并解释你所说的“它滞后”是什么意思吗?
-
i.imgur.com/HRgO0Kp.png 图片更详细地说明了它的工作原理。如果没有成功,它将更改文件,所以如果成功,请尝试。