繁体   English   中英

从另一个线程关闭 main

[英]closing main from another thread

我正在尝试在另一个线程完成时以某种方式关闭应用程序。 我正在使用 c#。 下面的代码只是一个例子

class main
{
  constuctor
  {
    thread t = new thread(open loading screen);

  }

  public void open loading screen()
  {
    if (error) 
     exit program
      application.exit(); // doesn't work
     this.Close; // doesn't work
    thread.abort or mainform.abort doesnt work.
  }
}

如果我用 application.exit 在 main 上调用 function 这不起作用,因为调用是从另一个线程进行的。

那我怎么退出程序??

提前致谢

工作线程应该设置一个变量或发出某种事件的信号,主线程应该定期检查它——它可以在可以时以正常方式关闭。

在主线程中使用 IsAlive 检查其他线程是否已结束,如果已结束则退出。

http://www.java2s.com/Code/CSharp/Thread/UseIsAlivetowaitforthreadstoend.htm

使用后台工作者 class 代替普通线程。 backgroundworker 可用于在 UI 线程之外的另一个线程中工作。 它还有一些方便的事件,可用于将进度更新发送回“拥有”线程。 看一眼:

ProgressChangedRunWorkerCompleted

这是一行代码中的解决方案

mainForm.Invoke((MethodInvoker)(() => mainForm.Close()));

在 mainform 中有一个 Closing 事件,如果在此之后它没有自行关闭,则关闭线程

经过一番严厉的批评后,我想我已经取得了一些进展。 我不是 100% 确定,但你能在构造函数完成并加载主窗体之前退出应用程序吗?

constuctor  {    thread t = new thread(open loading screen);  }

我使用主 for 和另一个之间的变量对退出屏幕执行完全相同的操作。 如果它返回true,我在main中有一个应用程序退出。

一开始我有一个加载屏幕,但尚未加载主窗体,并且已从构造函数进行调用,而构造函数尚未完成。

还有一件事应该在主构造函数中完成所有线程/ class / 加载//程序设置,如果是这样,请告知其他方式。

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM