2015-02-23 50 views
0

我只想先说,在研究这个时候,我读到这样的东西可能是不好的编程,但让我首先解释我的情况,也许并不是那么糟糕。编码是用C#完成的。如何在winforms应用程序和webform页面之间进行通信?

我有一个winforms应用程序,连接到几个ipcameras并创建查看流。它将每个新帧保存到文件流中。网络表单有一个主页面,可让您选择要查看的摄像机,然后开始从文件流中抓取新帧,并允许您查看摄像机。

现在,在winforms应用程序中,我有一个“播放”按钮来创建查看流,并且如果视频在winforms应用程序中“播放”,webform只能查看该摄像机。所以我的想法是让winforms应用程序始终运行并让每台相机都能播放,然后您可以从网络表单中选择任何相机并查看它。这工作正常,但现在我必须改变它。我必须做到这一点,当在Webform中选择摄像头,然后让视频在Winforms应用程序中开始“播放”。

所以我需要某种标志告诉winforms应用程序该摄像头正在被查看,一旦该摄像头不再被查看告诉winforms应用程序它可以停止“播放”该摄像头。问题是我不知道如何做到这一点。我看了看这个问题:

How to communicate between ASPX and WinForms

,但我真的不知道答案。谁能帮我?

我希望这是有道理的;如果不是,请问我,我会尽力解释。我是一名电气工程专业的学生,​​并不是一个程序员。

+2

Web应用程序不能直接使用与WinForms应用程序相同的代码与摄像机进行交互吗?什么是相机连接到WinForms应用程序? – David 2015-02-23 16:34:34

+0

我无法理解为什么我必须这样做,但我必须这样做。 – user3634308 2015-02-23 16:56:37

回答

0

创建Windows服务应用程序而不是Windows窗体应用程序,并通过HttpListener监听某些端口。

在您的Web表单上,您可以使用XmlHttpRequest或XDomainRequest或类似于您的浏览器版本的要求。当有人点击“播放”按钮时,它会向运行Windows窗体应用程序或Windows服务的计算机发送请求。

你的Windows应用程序通过HttpListener捕获该请求,然后你可以做你想做的事。

样品:

如果您有Internet Explorer 10+,你会使用XMLHttpRequest,但我从来没有使用过。我有IE 9.你可以很容易地转换它,我认为。当有人通过Web窗体点击相机1的播放按钮时,您可以在按钮点击事件中编写该代码。

XDomainRequest xDomainRequest = new XDomainRequest(); 

    if (xDomainRequest) { 
          xDomainRequest.onerror = xDomainRequestError; 
          xDomainRequest.onprogress = xDomainRequestProgress; 
          xDomainRequest.onload = xDomainRequestOnLoad; 
          xDomainRequest.ontimeout = xDomainRequestTimeOut; 
          xDomainRequest.timeout = 70000; 

// Lets say the PC which runs your win.app. has an IP like: 10.10.10.10 
// and lets say you will listen on 1234 port via HttpListener 
// Tell Windows form application that the camera with number 1 started playing 
          var cameraUrl = "http://10.10.10.10:1234/camera/play/1;" 

          // send request to Windows form application 
          xDomainRequest.open("POST", cameraUrl); 

          xDomainRequest.send(); 
         } 
         else { 
          alert("Error!"); 
         } 

并在其中被假定为始终运行Windows窗体应用程序:

public void StartNewThread() 
     { 
       Thread thread = new Thread(StartListening); 
       thread.Start(); 
     } 

     public void StartListening() 
     { 
        HttpListener listener = new HttpListener(); 

        string hostAddress = Dns.GetHostAddresses(Environment.MachineName)[1].ToString(); 

        if (hostAddress == "[::1]" || hostAddress == "::1") { hostAddress = "127.0.0.1"; } 

        String[] prefixes = new String[] { 
          "http://localhost:1234/camera/", 
          "http://" + hostAddress + ":1234/camera/" , 
          "http://" + Environment.MachineName + ":1234/camera/" }; 

        int ii = 0; 

        foreach (string s in prefixes) 
        { 
         listener.Prefixes.Add(s); 
         ii++; 
        } 

       while (true) 
       { 

      // When button clicked in Web Form for playing camera 1, Windows form application will catch it here 
        HttpListenerContext context = listener.GetContext(); 
        HttpListenerRequest request = context.Request; 

        String url = request.RawUrl; 
        String[] subUrlArray = url.Split('/'); 
        String queryString = subUrlArray[2]; 

        HttpListenerResponse response = context.Response; 

        if (queryString == "play") 
        { 
         if (subUrlArray.Length > 2 && subUrlArray[3] != "") 
         { 
          if(subUrlArray[3] == "1") 
          { 
           // Code for starting to play Camera 1 
          } 
          else if(subUrlArray[3] == "2") 
          { 
           // Code for starting to play Camera 2 
          } 
         }     
        } 
        else if (queryString == "stop") 
        { 
         if (subUrlArray.Length > 2 && subUrlArray[3] != "") 
         { 
          if(subUrlArray[3] == "1") 
          { 
           // Code for stopping Camera 1 
          } 
          else if(subUrlArray[3] == "2") 
          { 
           // Code for stopping Camera 2        } 
          } 
         }  
        } 
       } 
      } 

我不知道如果这个代码具有的格式或编译错误。但我相信你可以开发它。

+0

这听起来像我想要的,但是你有一个示例或示例链接。我从来没有听说过HttpListener。 – user3634308 2015-02-23 23:06:19

相关问题