Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Com port попытка доступа к элементу управления не из того потока, в котором он был создан / 6 сообщений из 6, страница 1 из 1
09.06.2014, 14:25
    #38665344
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Com port попытка доступа к элементу управления не из того потока, в котором он был создан
попытка доступа к элементу управления 'label2' не из того потока, в котором он был создан. Собственно, впытаюсь получить значения с ком порта пишет такую дрянь
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
//-----
using System.IO.Ports;
using System.IO;
 
namespace comSobitie
{
    public partial class Form1 : Form
    {
        // Таймер
        Timer timer = new Timer();
        // Порт
        SerialPort port = new SerialPort("COM2", 9600, System.IO.Ports.Parity.None, 8, System.IO.Ports.StopBits.One);
        string value = "";
        public Form1()
        {
            InitializeComponent();
 
            // Подписались на приход данных
            port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
 
            // Задаем интервал таймеру
            timer.Interval = 10000;
            // Подписываемся на тики таймера
            timer.Tick += new EventHandler(timer1_Tick);
            // Стартуем таймер
            timer.Start(); 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            // Открываем порт
            if (port.IsOpen)
            {
                // Если порт открыт, значит какой-то косяк, девайс не ответил, здесь обрабатываем
 
                // Закрываем
                port.Close();
            }
 
            // Открываем
            port.Open();
 
            // Чето посылаем
            port.Write("#10\r");
        }
        int i = 0;
        // Пришли данные
        void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            System.Threading.Thread.Sleep(100);
                // Получаем пришедшие данные
               string indata = port.ReadExisting();
                
                // Чето с ними делаем
             MessageBox.Show(i++.ToString() + " " + indata); - это работает
          label1.Text = indata; - это нет
          
         
           
 
                // Закрываем порт
                if (port.IsOpen) port.Close();
               }
       
        }
...
Рейтинг: 0 / 0
09.06.2014, 14:35
    #38665356
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Com port попытка доступа к элементу управления не из того потока, в котором он был создан
нашел такую реализацию. но как бы передать значение indata в глобальную переменную value




Код: c#
1.
2.
 if (label1.InvokeRequired) label1.Invoke(new Action<string>((s) => label1.Text = s), indata);
               else label1.Text = indata;
...
Рейтинг: 0 / 0
09.06.2014, 15:03
    #38665385
D129
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Com port попытка доступа к элементу управления не из того потока, в котором он был создан
des1roer,


Вы движетесь в правильном направлении,

Пункт 7 посмотрите:


Самые популярные вопросы
...
Рейтинг: 0 / 0
10.06.2014, 06:32
    #38665841
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Com port попытка доступа к элементу управления не из того потока, в котором он был создан
там опять же с лэйбл пример. мне то нужно в переменную передать

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  private void ToLabel(string text)
        {
            if (InvokeRequired)
                Invoke((Action<string>)ToLabel, text);
            else
                label1.Text = text;
        }
   ToLabel(indata);

так канает. но это не то
если пытаюсь так
Код: c#
1.
value = label1.Text;


то Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан.
...
Рейтинг: 0 / 0
10.06.2014, 08:29
    #38665866
LameUser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Com port попытка доступа к элементу управления не из того потока, в котором он был создан
des1roerтам опять же с лэйбл пример. мне то нужно в переменную передать

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
  private void ToLabel(string text)
        {
            if (InvokeRequired)
                Invoke((Action<string>)ToLabel, text);
            else
                label1.Text = text;
        }
   ToLabel(indata);

так канает. но это не то
если пытаюсь так
Код: c#
1.
value = label1.Text;


то Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'Form1' не из того потока, в котором он был создан.


Ну сделайте по аналогии метод на вашей форме

public string ThreadSafeGetLabelText()
{
//аналогичный код с проверкой на InvokeRequired
}
...
Рейтинг: 0 / 0
10.06.2014, 13:27
    #38666302
des1roer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Com port попытка доступа к элементу управления не из того потока, в котором он был создан
Оказывается, все ОЧЕНЬ просто -
Код: c#
1.
2.
3.
4.
    [color=red]String[/color] indata = port.ReadExisting();
             NpgsqlConnection conn = new NpgsqlConnection(("Server=" + list[0] + ";Port=" + list[1] + ";User Id=" + list[2] + ";Password=" + list[3] + ";Database=" + list[4] + ";"));
                    conn.Open();
                    String Mystr = ("INSERT INTO " + list[5] + "(\"F_TagName_ID\",\"F_Value\",\"F_Date\")  VALUES (" + dt3.Rows[0][0].ToString() + ",\'" + indata + "\',\'" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\'   )");


нужно было ипользовать String а не string и ошибки не возникатет )))
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Com port попытка доступа к элементу управления не из того потока, в котором он был создан / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]