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