想让c#窗口等到和外部设备连接后再显示?

想让c#的winform程序,等到与外部的相机相连接后,窗体程序再在界面中显示出来。如果相机一直未连接等到30秒后提示退出程序?

在 form_load 里面加上循环

DateTime dt = DateTime.Now;
while (1)
{
if (new TimeSpam(DateTime.Tick - dt.Tick).TotalSeconds > 30) Application.Exit();
Application.DoEvents();
Thread.Sleep(1000);
if (外部相机可以访问) break;
}

【以下回答由 GPT 生成】

我可以提供以下解决方案:

  1. 首先,你可以使用ManagementEventWatcher类来监测设备连接和断开的事件。这个类可以监测到系统中设备的变化。

  2. 在你的程序中,创建一个ManagementEventWatcher对象,用于监测设备连接事件。可以使用以下代码:

using System.Management;

public class DeviceWatcher
{
    private ManagementEventWatcher watcher;

    public void Start()
    {
        WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_DeviceChangeEvent WHERE EventType = 2");

        watcher = new ManagementEventWatcher(query);
        watcher.EventArrived += DeviceConnectedEvent;

        watcher.Start();
    }

    private void DeviceConnectedEvent(object sender, EventArrivedEventArgs e)
    {
        // 处理设备连接事件
        // 在这里添加相机连接后显示窗体和其他需要的逻辑
    }

    public void Stop()
    {
        if (watcher != null)
        {
            watcher.Stop();
            watcher.Dispose();
        }
    }
}
  1. 在窗体类中,添加一个计时器(Timer)用于等待30秒。当计时器到达30秒时,显示退出提示,并退出程序。可以使用以下代码:
using System.Timers;
using System.Windows.Forms;

public class MyForm : Form
{
    private Timer timer;

    public MyForm()
    {
        InitializeComponent();

        timer = new Timer();
        timer.Interval = 30000; // 30秒
        timer.Elapsed += TimerElapsed;
        timer.AutoReset = false; // 不重复触发
    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);

        DeviceWatcher deviceWatcher = new DeviceWatcher();
        deviceWatcher.Start();

        timer.Start();
    }

    private void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        // 在30秒到达后的处理逻辑
        MessageBox.Show("相机连接超时,程序将退出。");
        Application.Exit();
    }
}

这样,当设备连接事件触发时,你可以在DeviceConnectedEvent方法中添加逻辑来显示窗体和其他必要的操作。同时,如果30秒钟没有设备连接事件发生,将弹出提示并退出程序。

希望以上解决方案能对你有所帮助,如果你有任何其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^