Попытка запустить поток из формы - PullRequest
0 голосов
/ 14 июня 2011

У меня есть два связанных вопроса относительно кода, включенного ниже

1) Я пытаюсь читать с последовательного порта, который является частью формы Visual C ++. Я хочу создать поток в функции InitializeComponent, но я получаю эту ошибку на странице формы, когда я включаю вызов для запуска потока:

"Предупреждение 1 Не удалось найти тип 'Thread'. Убедитесь, что на сборку, содержащую этот тип, ссылаются. Если этот тип является частью вашего проекта разработки, убедитесь, что проект был успешно построен."

2) Поток будет работать в статической функции Read. Для чтения необходимо разрешить последовательный порт, который находится в главной форме (последовательный порт называется arduino), но он, очевидно, не может их разрешить: «слева от .ReadLine 'должен быть класс / структура / объединение»

Предложения

    using namespace System::IO::Ports;
    using namespace System::Threading;
public ref class Form1 : public System::Windows::Forms::Form
{

public:
    Form1(void)
    {
        InitializeComponent();
        //
        //TODO: Add the constructor code here
        //
    }
private: void static Read(void)
    {
       while (1)
       {
          try
          {
              String^ message = arduino.ReadLine();
           //  this->ArduinoOutputTextBox->Text = message;
          }
          catch (TimeoutException ^) { }
        }

    } 
protected:
    /// <summary>
    /// Clean up any resources being used.
    /// </summary>
    ~Form1()
    {
        if (components)
        {
            delete components;
        }
    }
private: System::Windows::Forms::Button^  USB_button;
private: System::IO::Ports::SerialPort^  arduino;
private: System::Windows::Forms::TextBox^  ArduinoOutputTextBox;
private: System::ComponentModel::IContainer^  components;

protected: 

private:
    /// <summary>
    /// Required designer variable.
    /// </summary>


     #pragma region Windows Form Designer generated code
    /// <summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    /// </summary>
    void InitializeComponent(void)
    {
        Thread^ readThread = gcnew Thread(gcnew ThreadStart(Read));
        this->components = (gcnew System::ComponentModel::Container());
        this->USB_button = (gcnew System::Windows::Forms::Button());
        this->arduino = (gcnew System::IO::Ports::SerialPort(this->components));
        this->ArduinoOutputTextBox = (gcnew System::Windows::Forms::TextBox());
        this->SuspendLayout();

1 Ответ

1 голос
/ 14 июня 2011

arduino - это ссылка на объект, а не на реальный объект.

Вы должны написать arduino->readLine().

...