首页 > 解决方案 > 如何编辑我的代码以在控制台而不是 GUI 中运行

问题描述

我正在按照教程将我的蓝牙模块连接到 pc 并从中读取数据,但是在教程中他设计了程序以作为 GUI 运行,现在我正在尝试编辑它以在控制台中运行,我将合并统一引擎中的新代码通过输入数据移动我的游戏。使用的 GUI 和代码,

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using InTheHand;
using InTheHand.Net.Bluetooth;
using InTheHand.Net.Sockets;
using System.IO;

namespace Bluetooth
{
    public partial class Form1 : Form
    {
        List<string> items;
        public Form1()
        {
            items = new List<string>();
            InitializeComponent();

        }
        
        private void bGo_Click(object sender, EventArgs e)
        {
            if(serverStarted)
            {
                updateUI("Server already started!");                
                return;
            }
            if(rbClient.Checked)
            {
                connectAsClient();
            }
            else
            {
                connectAsServer();
            }
        }

        private void connectAsServer()
        {
            Thread bluetoothServerThread = new Thread(new ThreadStart(serverConnectThread));
            bluetoothServerThread.Start();
        }

        Guid mUUID = new Guid("00001101-0000-1000-8000-00805F9B34FB");
        bool serverStarted = false;
        public void serverConnectThread()
        {
            serverStarted = true;
            updateUI("Server started, waiting for clients");
            BluetoothListener blueListener = new BluetoothListener(mUUID);
            blueListener.Start();
            BluetoothClient conn = blueListener.AcceptBluetoothClient();
            updateUI("Client has connected");
            Stream mstream = conn.GetStream();
            while (true)
            {
                try
                {
                    //handle server connection
                    byte[] received = new byte[1024];
                    mstream.Read(received, 0, received.Length);
                    updateUI("Received: " + Encoding.ASCII.GetString(received));
                    byte[] sent = Encoding.ASCII.GetBytes("Hello world\n");
                    mstream.Write(sent, 0, sent.Length);
                }
                catch (IOException exception)
                {
                    updateUI("Client has disconnected!!");
                    break;
                }

            }
        }
        private void connectAsClient()
        {
            startScan();
        }
        private void startScan()
        {
            listBox1.DataSource = null;
            listBox1.Items.Clear();
            items.Clear();
            Thread bluetoothScanThread = new Thread(new ThreadStart(scan));
            bluetoothScanThread.Start();
        }

        BluetoothDeviceInfo[] devices;
        private void scan()
        {            
            updateUI("Start scanning...");                                    
            BluetoothClient client = new BluetoothClient();
            devices = client.DiscoverDevicesInRange();
            updateUI(devices.Length.ToString() + " devices discovered");
            updateUI("Scan complete");
            foreach(BluetoothDeviceInfo d in devices)
            {
                items.Add(d.DeviceName);
            }
            updateDeviceList();
        }        
        private void updateUI(string message)
        {
            Func<int> del = delegate ()
            {
                tbOutput.AppendText(message + System.Environment.NewLine);
                return 0;
            };
            Invoke(del);
        }

        private void updateDeviceList()
        {
            Func<int> del = delegate ()
            {
                listBox1.DataSource = items;
                return 0;
            };
            Invoke(del);
        }

        BluetoothDeviceInfo DeviceInfo;
        private void listBox1_DoubleClick(object sender, EventArgs e)
        {
            DeviceInfo = devices.ElementAt(listBox1.SelectedIndex);
            updateUI(DeviceInfo.DeviceName + " was Selected, attempting connect");

            if(PairDevice())
            {
                updateUI("Device paired");
                updateUI("starting connect thread");
                Thread bluetoothClientThread = new Thread(new ThreadStart(ClientConnectThread));
                bluetoothClientThread.Start();                
            }
            else
            {
                updateUI("pair failed");
            }
        }

        private void ClientConnectThread()
        {
            BluetoothClient client = new BluetoothClient();
            updateUI("Attempting connect");
            client.BeginConnect(DeviceInfo.DeviceAddress, mUUID, this.BluetoothClientConnectCallback, client);                        
        }

        void BluetoothClientConnectCallback(IAsyncResult result)
        {
            BluetoothClient client = (BluetoothClient)result.AsyncState;
            client.EndConnect(result);

            Stream stream = client.GetStream();
            stream.ReadTimeout = 10000;
            
            while(true)
            {
                try
                {
                    byte[] received = new byte[1024];
                    stream.Read(received, 0, received.Length);
                    updateUI(Encoding.ASCII.GetString(received));
                }
                catch (IOException exception)
                {
                    updateUI("Client has disconnected!!");
                    break;
                }
            }
        }

        string mypin = "1234";        
        private bool PairDevice()
        {
            if(!DeviceInfo.Authenticated)
            {
                if (!BluetoothSecurity.PairRequest(DeviceInfo.DeviceAddress, mypin)) ;
                {
                    return false;
                }
            }
            return true;
        }

        bool ready = false;
        byte[] message;
        private void tbText_KeyPress(object sender, KeyPressEventArgs e)
        {
            if(e.KeyChar == 13)
            {
                byte[] b = Encoding.ASCII.GetBytes(tbText.Text);
                ready = true;
                tbText.Clear();
            }

        }
    }
}

标签: c#bluetooth

解决方案


我试图编辑我的代码,但我不知道为什么不能调用 scan 方法。

class Program
    {
        Guid mUUID = new Guid("00001101-0000-1000-8000-00805F9B34FB");
        List<string> items = new List<string>();
        BluetoothDeviceInfo[] devices;
        static void Main(string[] args)
        {                                    
            Console.WriteLine("Hello World!");            
            Thread bluetoothScanThread = new Thread(new ThreadStart(scan));
            bluetoothScanThread.Start();
        }
        public void scan()
        {
            Console.WriteLine("Start scanning...");
            BluetoothClient client = new BluetoothClient();
            devices = client.DiscoverDevicesInRange();
            Console.WriteLine(devices.Length.ToString() + " devices discovered");
            Console.WriteLine("Scan complete");
            foreach (BluetoothDeviceInfo d in devices)
            {
                items.Add(d.DeviceName);
            }
        }

    }

推荐阅读