Рейтинг:
1
Ralf Meier
Еще одна (очень простая) возможность :
- bevor вы записываете свои данные в Serialport, который Вы читаете сейчас, в переменную (тип Date)
- когда вы закончите Serialport. write, вы построите разницу (как timeSpan) между вашей переменной и Now - это покажет вам также прошедшее время (в секундах или миллисекундах-как вы хотите)
Это может выглядеть так :
System.DateTime myStart = System.DateTime.Now;
serialPort1.Write(System.IO.File.ReadAllText(this.txtfilePo.Text));
System.TimeSpan myTimespan = System.DateTime.Now.Subtract(myStart);
Int myElapsedTime = myTimespan.Seconds * 1000 + myTimespan.Milliseconds;
Member 12990959
спасибо за ответ
частная butSendFile_Click недействительным(объект отправителя, EventArgs в электронной)
{
if (serialPort1.Isopen значение == ложь)
{
это.serialPort1.Открыть();
}
Система.DateTime myStart = сейчас;
serialPort1.Писать(Системы.ИО.Файл.ReadAllText(this. txtfile2. Text));
TimeSpan myTimespan = сейчас.Вычитание(myStart);
Int myElapsedTime = myTimespan.Секунды * 1000 + myTimespan.Миллисекунды;
}
если я напишу такой код, то получу 3 ошибки в
1) "сейчас" не выходит в текущем контексте
2) "int" не удалось найти
что я должен сделать, чтобы удалить эти ошибки
Ralf Meier
Извините... это происходит при написании кода вслепую ...
Теперь выходит из пространства имен System - вы должны либо использовать его (используя System ;), либо написать его до этой инструкции (я изменил свое решение)
Member 12990959
И снова он показывает те же ошибки, сэр.
теперь и целое число
Даже я использовать (используя.Система;)
Ralf Meier
Еще раз прошу прощения,
в своем коде я спонтанно использую эти части ...
Это должна быть " система.значение datetime.Теперь" - и INT должен быть прав-смотрите мой код-изменения
Member 12990959
Он не работает на этот раз без ошибок, но порт не открывается, если я вставляю свой код и связь не обрабатывается
Ralf Meier
ОК... код соответствует тому, что немного выше, с моими модификациями ...?
Если да , то что говорит отладчик ?
Но: возможно, вам следует снова показать свой код ...
Member 12990959
частная butSetFile_Click недействительным(объект отправителя, EventArgs в электронной)
{
это. openFileDialog1.Метод showdialog();
это.txtfile2.Text = this. openFileDialog1.имя файла;
// выбор файла из проводника
}
частная butSendFile_Click недействительным(объект отправителя, EventArgs в электронной)
{
попробуйте / / отправить файлы через последовательный порт
{
if (serialPort1.Isopen значение == ложь)
{
это.serialPort1.Открыть();
}
Система.Системы ваши личные данные типа datetime=.Датавремя.Сейчас;
serialPort1.Писать(Системы.ИО.Файл.ReadAllText(this. txtfile2. Text));
Система.TimeSpan myTimespan = система.Датавремя.Сейчас.Вычитание(с mystart);
int myElapsedTime = myTimespan.Секунды * 1000 + myTimespan.Миллисекунды;
}
ловить
{
}
}
Это мой код... хотите полный код ...???
Ralf Meier
Нет... это нормально реализовано так, как должно ...
А как насчет моих вопросов ?
- Что говорит отладчик ?
- Это шаг через код или есть какой-то обман ? Если да, то в какой точке кода появляется исключение?
Member 12990959
в коде, который я использую, есть исключение try and catch, но таймер даже не запускается
Ralf Meier
Так... установите точку останова перед каждой кодовой линией и посмотрите, насколько хорошо работает ваш код и в какой кодовой линии возникает ошибка.
Разве вы не работали с отладчиком до сих пор ?
Ralf Meier
пожалуйста, обратите внимание :
Я не сижу перед твоим компьютером и не вижу того, что видишь ты.
Если вам нужна моя помощь, вы должны помочь мне помочь вам ...
Рейтинг:
0
Deepak Geriani
Секундомер намного лучше любого таймера для этого
вот пример, который может помочь понять, когда и как вызывать секундомер, остановить его и вывести время.
using System.Threading;
public class Program
{
public static void Main(string[] args)
{
var stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start();
Thread.Sleep(100);
Console.WriteLine("Hello, world!");
// Your code here.
int cnt=0;
for(int i=1; i<=100000;i++)
{
cnt+=1;
}
stopwatch.Stop();
TimeSpan ts = stopwatch.Elapsed;
string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}",
ts.Hours, ts.Minutes, ts.Seconds,
ts.Milliseconds / 10);
Console.WriteLine("RunTime " + elapsedTime);
}
}
Member 12990959
Спасибо за ответ Здесь я посылаю текстовый файл а не прямые сообщения как я должен попробовать этот код и его приложение windows а не консольное приложение
Ralf Meier
Я вас не понимаю-образец тихий хороший.
Все между секундомером.Старт и секундомер.Стоп-это пример, чтобы показать, как это работает. В этом месте вы должны ввести свой метод передачи данных или его содержимое ...
Deepak Geriani
Именно то, что я пытался объяснить, - это написать вам логический код между запуском и остановкой секундомера, а также прокомментировать, что напишите "ваш код здесь", Если вы можете видеть его правильно
Member 12990959
да..
частная butSendFile_Click недействительным(объект отправителя, EventArgs в электронной)
{
if (serialPort1.Isopen значение == ложь)
{
это.serialPort1.Открыть();
}
таймера1.Начать();
serialPort1.Писать(Системы.ИО.Файл.ReadAllText(this. txtfile2. Text));
таймера1.Стоп();
}
если мы используем секундомер start и stop в одном цикле, он даже не запускается
Рейтинг:
0
OriginalGriff
Вызов:
timer1.Stop();
Когда передача завершена - то есть у вас закончились данные для отправки. Регистрация
Последовательный порт.Собственность BytesToWrite (Системы.ИО.Порты)[
^] и это даст вам оценку - еще не все байты поступят в деситинацию, потому что драйвер порта также будет иметь свой собственный буфер, и аппаратные чипы порта обычно также имеют небольшой (8 байт или около того) буфер, но вы не можете запросить их напрямую, чтобы получить точную индикацию.
Member 12990959
да, я пишу timer1. stop (); после 1-го кода таймер даже не работает
OriginalGriff
:вздыхать:
Вот почему я упомянул BytesToWrite-данные последовательного порта буферизуются три раза (четыре, если включить сам битовый излучатель) - так что если вы не проверите, сколько осталось записать, вы не узнаете...