Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.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#,我有一张有计时器的表格。在计时器滴答声事件中,我有以下代码: private void timer1_Tick(...) { Process.Start("http://www.google.com"); } 我希望每当触发勾号事件时,网页只有在尚未打开时才会打开。如果希望某个进程只触发一次,请不要为此使用计时器。在Mainwindow构造函数、窗口的加载事件或按钮的单击事件中调用进程。另一种方法是使用计数器,并在tick方法中增加它。如果此计数器等于1,您所要做的就是通过写入ti

我有一张有计时器的表格。在计时器滴答声事件中,我有以下代码:

  private void timer1_Tick(...) {
  Process.Start("http://www.google.com");
  }

我希望每当触发勾号事件时,网页只有在尚未打开时才会打开。

如果希望某个进程只触发一次,请不要为此使用计时器。在Mainwindow构造函数、窗口的加载事件或按钮的单击事件中调用进程。另一种方法是使用计数器,并在tick方法中增加它。如果此计数器等于1,您所要做的就是通过写入timer.stop()停止计时器

这不是对你问题的回答,而是一个尝试不同方法的建议

您可以尝试将控件放在窗体(Winform)上,而不是启动新的浏览器窗口。通过这种方式,您可以完全控制何时以及打开什么链接,而不是试图从系统(以及各种浏览器)中确定给定的网页是否已打开。
WebBrowser
控件为您提供了对底层浏览器窗口的属性/事件的相当多的控制,因此您可以更轻松地完成您正在尝试执行的操作

您必须添加自己的地址栏/工具栏(如果您需要其中任何一个),但这样做的工作量仍然要少得多。有些事情你用
WebBrowser
是做不到的,但用你目前的方法几乎不可能做到

对你的问题给出一个真实的(不完整的)答案:你有可能实现你想做的事情,但这相当棘手,而且不完全可靠。就我个人而言,我不会浪费时间


编辑:根据SpikeX在评论中的建议,您也可以将其用作嵌入式浏览器。我以前不知道。

你能展示你当前的代码,让我们知道你到目前为止尝试了什么吗?事实上,我需要回答另一个让我困惑的问题,所以我在这里简化了这个问题,如果我能解决这个问题,那么我会解决另一个问题,请看这会有点棘手。这不是一个你正在开始的过程,而是一个你正在浏览的网页。这既可以在现有流程中打开一个新选项卡,也可以生成一个新选项卡(我们不知道这一点,因为我们不知道浏览器)。要做到这一点并不容易,因为您不知道用户的默认浏览器是什么。我能想到的唯一一件事是,你必须使用Win API调用(P/Invokes)扫描打开的窗口标题,以查看其中是否有带有“Google”的标题,但这肯定不容易,也不干净。这不是提问者想要的,请重新阅读问题。这是一个有效的答案。这个问题的前提是有严重缺陷的。这是一个很好的建议,使用
过程。Start
几乎无法控制启动后发生的事情,但嵌入web浏览器允许更多的控制。我还想推荐作为
WebBrowser
控件的嵌入式替代品,因为Awesomium在Chrome引擎上运行,而不是在过时的IE引擎上运行。@SpikeX是的,这是一个很好的建议,我不知道。