C# 为什么我的代码只是脱离了它的逻辑?

C# 为什么我的代码只是脱离了它的逻辑?,c#,.net,wpf,winforms,webcam,C#,.net,Wpf,Winforms,Webcam,所以我用的是我在网上找到的一个库,它应该可以让我的摄像头和C#配合使用变得非常简单,所以我决定尝试一下。 我正在模拟的项目是使用WPF或WinForms,它们有两种。 我决定我想创建一个控制台版本的这个,现在有一些小问题,关于控制和什么,但我似乎是所有的控制下,我所面临的问题是,它走出了它的逻辑未知的原因 这就是它应该如何流动的。(在WPF中也是如此) 下面是我的工作(控制台应用程序) 我不知道它为什么会这样,我真的很想知道,一直在反复调试,但我似乎真的无法解开这个谜 这是控制台应用程序的主要部

所以我用的是我在网上找到的一个库,它应该可以让我的摄像头和C#配合使用变得非常简单,所以我决定尝试一下。 我正在模拟的项目是使用WPF或WinForms,它们有两种。 我决定我想创建一个控制台版本的这个,现在有一些小问题,关于控制和什么,但我似乎是所有的控制下,我所面临的问题是,它走出了它的逻辑未知的原因

这就是它应该如何流动的。(在WPF中也是如此)

下面是我的工作(控制台应用程序)

我不知道它为什么会这样,我真的很想知道,一直在反复调试,但我似乎真的无法解开这个谜

这是控制台应用程序的主要部分

class Program
    {
        static WebCam webcam;

        static System.Windows.Controls.Image image = new System.Windows.Controls.Image();
        [STAThread]
        static void Main(string[] args)
        {
            webcam = new WebCam();
            webcam.InitializeWebCam(ref image);

            webcam.Start();
        }
    }
还有网络摄像机课

和Helper类

这是WPF应用程序的主要部分

webcam.Start(); -> webcam.Start(0); Starts the webcam here -> and then it steps out of webcam.Start(); and closes.
public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        WebCam webcam;

        private void mainFrm_Loaded(object sender, RoutedEventArgs e)
        {
            webcam = new WebCam();
            webcam.InitializeWebCam(ref imgMain);
        }

        private void btnCapture_Click(object sender, RoutedEventArgs e)
        {
            webcam.Start();
        }
    }

这是我在控制台应用程序中找到所有内容的原始帖子,在末尾添加,所以应用程序仍然运行

 static void Main(string[] args)
         {
             webcam = new WebCam();
             webcam.InitializeWebCam(ref image);

             webcam.Start();
             Console.ReadLine();
         }

然后,确保您的网络摄像头捕捉到事件正在触发。即使Start方法立即返回,它的行为也可能被设计为不阻止调用线程。

我做了,但它仍然继续跳出,不应该跳出webcam.Start();您是否在控制台应用程序中捕获了这些网络摄像头图像-事件。即使Start方法调用立即返回,可能摄像头仍在工作?它启动网络摄像头,它会打开,因为指示灯变为绿色,虽然没有控件,但无法显示,但我可能想将一个帧保存到剪贴板以测试它。从您下面的评论中可以看出:“它不应该跳出网络摄像头。Start();””“为什么不呢?在WPF程序中,几乎可以肯定它会这样做,即
Start()
方法在被调用后不久返回。否则UI将冻结。那么,为什么您认为
Start()
方法不应该在控制台程序场景中返回呢?而且要明确的是,从您到目前为止发布的所有指示来看,这只不过是
Main()
方法立即返回,导致程序退出,这是由标记的副本解决的。如果您不这么认为,您需要改进这个问题,这样我们就可以清楚地知道为什么我们应该相信
Start()
方法应该阻止并保持程序运行。@PeterDuniho我正在并排调试它们,控制台应用程序在运行一次后关闭,而WPF版本没有退出,有没有一种方法可以让我用控制台应用程序捕获一个帧,看看它是否得到了什么?WPF程序有一个事件泵循环(对您隐藏…它在
应用程序中。Run()
方法中,该方法由您自己的
应用程序
类隐式调用),它保持程序运行。您可以在
btnCapture\u Click()
方法中调用
Start()
,该方法显然是WPF UI中按钮上的
Click
事件的事件处理程序。该方法不是程序的入口点,
Main()
方式是控制台程序的入口点,因此从它返回不会终止WPF程序,而从控制台程序中的
Main()
返回的方式会终止WPF程序。@PeterDuniho解释了一些事情,我还尝试像这样使用SaveImageCapture
Helper.SaveImageCapture((BitmapSource)image.Source)但这在第
encoder.Frames.Add(BitmapFrame.Create(bitmap))行引发了一个错误说明
System.ArgumentNullException:'值不能为null。参数名称:source'
我很确定我将image.source转换为BitmapSource
 static void Main(string[] args)
         {
             webcam = new WebCam();
             webcam.InitializeWebCam(ref image);

             webcam.Start();
             Console.ReadLine();
         }