我做了一个线程来做一些工作并运行shutdown.exe来关闭电脑。
Worker work = new Worker();
Thread thread = new Thread(new ThreadStart(work.DoWork));
thread.Start();
和方法 DoWork()
public void DoWork()
{
/* Do some thing */
// This will shutdown the PC
ProcessStartInfo startInfo = new ProcessStartInfo(Environment.GetFolderPath(System.Environment.SpecialFolder.System) + @"\shutdown.exe", "-s -t 5");
Process.Start(startInfo);
}
如果我在主线程中调用方法 work.DoWork(),PC 将关闭。但是,如果我使用 thread.Start() 将其放入线程中,PC 将不会关闭。
编辑:发现我的错误。我创建了一个线程安全的调用方法来读取始终返回 false 的复选框
delegate bool GetcbShutdownCheckedValueCallback();
public bool GetcbShutdownCheckedValue()
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.lblCraftRemain.InvokeRequired)
{
GetcbShutdownCheckedValueCallback d = new GetcbShutdownCheckedValueCallback(GetcbShutdownCheckedValue);
this.Invoke(d);
}
else
{
return cbShutdown.Checked;
}
return false;
}
我调用该方法来检查复选框是否被选中然后关闭。所以实际上代码没有被执行。