Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用可以执行多个线程的应用程序启动特定线程一次_C# - Fatal编程技术网

C# 使用可以执行多个线程的应用程序启动特定线程一次

C# 使用可以执行多个线程的应用程序启动特定线程一次,c#,C#,我试图在一个新线程上启动一个特定的任务,但我只想启动它一次,并允许同一个应用程序执行多次,但不启动这样的任务(再次) 到目前为止,我试过: class Program { private static EventWaitHandle s_event; [STAThread] static void Main(string[] args) { bool canCreateTask = false; try { s_event = new EventWaitHan

我试图在一个新线程上启动一个特定的任务,但我只想启动它一次,并允许同一个应用程序执行多次,但不启动这样的任务(再次)

到目前为止,我试过:

class Program {
private static EventWaitHandle s_event;

[STAThread]
static void Main(string[] args) {

    bool canCreateTask = false;
    try {
        s_event = new EventWaitHandle(false, EventResetMode.ManualReset, "My Application", out canCreateTask);
    } catch(Exception exception) {
        Console.Write(exception.Message);
    }
    if (canCreateTask) {
        //Create the specific task on a new thread
    }    
}
这在下一个场景中可以正常工作:我第一次启动应用程序,任务按预期启动,如果我下次启动应用程序(不关闭第一次),任务也不会启动,这也很好

当我关闭第一个应用程序(第二个应用程序正在运行)并再次启动一个新应用程序时,问题就出现了,任务并没有像我希望的那样启动

我根本不确定我是否能通过EventWaitHandle实现这一点,或者我是否做错了什么

我怎样才能做到这一点


谢谢大家!

您确定任务已完成吗?关闭主
线程
不会终止我的
新线程
knowledge@Symon:如果一个线程被标记为背景线程,它将不会使进程保持活动状态(当主线程死亡时,它将死亡)。如果不是后台线程,它将继续运行并保持进程的活力。Symon,@Flydog57,谢谢你的回答,但将线程设置为后台线程似乎并不能解决我的问题,它的工作方式与我在第一篇帖子中所说的相同。还有什么我可以试试的吗?那不是答案,那是评论。它不会解决你的问题。您需要的是一种更复杂的机制来维护跨进程状态。这不是我脑子里想出来的,所以我希望其他人会插话回答。您需要的是,无论有多少进程已启动和停止,都将保持某种“设置”状态。第一个进程应启动并设置为“OK”,最后一个要关闭的进程应关闭“OK”。它很可能类似于一个信号量,让创建命名系统同步事件EventWaitHandle(并因此运行任务/线程)的程序保持它直到程序结束。获取现有EventWaitHandle的任何进一步程序执行(即,
out bool
参数变为false)应在检查canCreateTask后立即处理此EventWaitHandle。否则,这些辅助程序执行的EventWaitHandle实例将保留底层系统同步事件,并使其保持活动状态,即使第一次程序执行(即/正在运行任务/线程)结束。