Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2013, 06:22   #1
MrFakir
 
Регистрация: 02.12.2013
Сообщений: 6
Хорошо Обмен данными между двумя потоками.

Здравствуйте, пишу приложение для windows магазина (win 8.1, visual studio 2013 express). Необходимо сделать отображение времени на форме. Время извлекаю, только осталось сделать его обновление каждую секунду соответственно. Использую System.Threading.Timer (так как подобный вид приложений поддерживает только такой таймер).
Собственно вопрос:
Как сделать сделать отображение в TextBox (он же label) значение из делегата таймера. Или может каким другим способом это реализовать?
Ниже код
Код:
           //создаю таймер
           Timer timerTimeSchet = new Timer(timerProcSchet, timeStr, 0, 100);

        }
        
        

        private void timerProcSchet(object data)
        {
           //получаю в строку время, и извлекаю нужные цифры   
            string time = "";
            time = DateTime.Now.ToString();
            char[] timeChar = new char[8];
            int lenStrTime = time.Length - 11;
            time.CopyTo(11, timeChar, 0, lenStrTime);

            timeStr = new string(timeChar); 
            //timeStr получило время формата 00:00:00

            timeText.Text = timeStr; //как провести вот эту операцию?
        }
p.s.
Если время присваивать не в textbox а в обычный глобальный стринг, то всё работает нормально. Понял, что форма и таймер этот работает в разных потоках, поэтому необходимо их как то связать. Три ддня на msdn ничего не дали(((
Когда-то и я стану программистом.
MrFakir вне форума Ответить с цитированием
Старый 02.12.2013, 09:46   #2
Укропчик
Пользователь
 
Регистрация: 27.11.2013
Сообщений: 10
По умолчанию

приветствуем...объявляешь делегат delegate void UpdateInfo(); вначале проекта, потом создаешь функцию UpdateLabels{
timeText.Text = timeStr; //как провести вот эту операцию?
}
и в таймере вызывешь:
this.Invoke(new UpdateInfo(UpdateLabels), new object[] { });
Укропчик вне форума Ответить с цитированием
Старый 02.12.2013, 10:25   #3
MrFakir
 
Регистрация: 02.12.2013
Сообщений: 6
По умолчанию

Ошибка "Требуется метод доступа get или set"
Как быть?

Код:
        public static string timeStr = "";
        //объявляю делегат
        delegate void UpdateInfo();

        public MainPage()
        {
            this.InitializeComponent();
            this.navigationHelper = new NavigationHelper(this);
            this.navigationHelper.LoadState += navigationHelper_LoadState;
            this.navigationHelper.SaveState += navigationHelper_SaveState;
              
            Timer timerTimeSchet = new Timer(timerProcSchet, timeStr, 0, 100);

        }
        //создаю функцию, вероятней всего с ошибкой
        public static void  UpdateLabels
        {
            timeText.Text = timeStr;
        }

        private void timerProcSchet(object data)
        {
            string time = "";
            time = DateTime.Now.ToString();
            char[] timeChar = new char[8];
            int lenStrTime = time.Length - 11;
            time.CopyTo(11, timeChar, 0, lenStrTime);

            timeStr = new string(timeChar);

            //вызываю
            this.Invoke(new UpdateInfo(UpdateLabels), new object[] { }); 
        }
Когда-то и я стану программистом.
MrFakir вне форума Ответить с цитированием
Старый 02.12.2013, 10:33   #4
MrFakir
 
Регистрация: 02.12.2013
Сообщений: 6
По умолчанию

Добавил
Код:
        public static void  UpdateLabels
        {
            get { textbb.Text = timeStr; }
        }
теперь ошибка
""MuProgrr.MainPage" не содержит определения для "Invoke" и не был найден метод расширения "Invoke", принимающий тип "MuProgrr.MainPage" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)"
и
""MuProgrr.MainPage.UpdateLabel s" является "свойство", но используется как "метод""
Когда-то и я стану программистом.
MrFakir вне форума Ответить с цитированием
Старый 02.12.2013, 10:38   #5
Укропчик
Пользователь
 
Регистрация: 27.11.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от MrFakir Посмотреть сообщение
Ошибка "Требуется метод доступа get или set"
Как быть?

Код:
        public static string timeStr = "";
        //объявляю делегат
        delegate void UpdateInfo();

        public MainPage()
        {
            this.InitializeComponent();
            this.navigationHelper = new NavigationHelper(this);
            this.navigationHelper.LoadState += navigationHelper_LoadState;
            this.navigationHelper.SaveState += navigationHelper_SaveState;
              
            Timer timerTimeSchet = new Timer(timerProcSchet, timeStr, 0, 100);

        }
        //создаю функцию, вероятней всего с ошибкой
        public static void  UpdateLabels
        {
            timeText.Text = timeStr;
        }

        private void timerProcSchet(object data)
        {
            string time = "";
            time = DateTime.Now.ToString();
            char[] timeChar = new char[8];
            int lenStrTime = time.Length - 11;
            time.CopyTo(11, timeChar, 0, lenStrTime);

            timeStr = new string(timeChar);

            //вызываю
            this.Invoke(new UpdateInfo(UpdateLabels), new object[] { }); 
        }
public string timeStr = ""; // static убрать

public void UpdateLabels()
{
timeText.Text = timeStr;
}

и все работает
Укропчик вне форума Ответить с цитированием
Старый 02.12.2013, 10:47   #6
MrFakir
 
Регистрация: 02.12.2013
Сообщений: 6
По умолчанию

Опять 25, возвращаюсь к тому с чего всё начиналось.
Ошибка 1 "MuProgrr.MainPage" не содержит определение для "Invoke". Не удалось найти метод расширения "Invoke", принимающий первый аргумент типа "MuProgrr.MainPage" (пропущена директива using или ссылка на сборку?)
Когда-то и я стану программистом.

Последний раз редактировалось MrFakir; 02.12.2013 в 10:53.
MrFakir вне форума Ответить с цитированием
Старый 02.12.2013, 10:58   #7
Укропчик
Пользователь
 
Регистрация: 27.11.2013
Сообщений: 10
По умолчанию

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WortTest
{

//объявляю делегат
delegate void UpdateInfo();
public partial class Form1 : Form
{
public string timeStr = "";
System.Windows.Forms.Timer timerTimeSchet = new System.Windows.Forms.Timer();

public Form1()
{
InitializeComponent();
timerTimeSchet.Tick += new EventHandler(timerProcSchet);
timerTimeSchet.Interval = 1;
timerTimeSchet.Start();
}
private void timerProcSchet(Object myObject, EventArgs myEventArgs)
{
//получаю в строку время, и извлекаю нужные цифры
string time = "";
time = DateTime.Now.ToString();
char[] timeChar = new char[8];
int lenStrTime = time.Length - 11;
time.CopyTo(11, timeChar, 0, lenStrTime);

timeStr = new string(timeChar);
//timeStr получило время формата 00:00:00

this.Invoke(new UpdateInfo(UpdateLabels), new object[] { });
}
public void UpdateLabels()
{
label1.Text = timeStr; //
}
}
}
Укропчик вне форума Ответить с цитированием
Старый 02.12.2013, 10:59   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx
eval вне форума Ответить с цитированием
Старый 02.12.2013, 10:59   #9
Укропчик
Пользователь
 
Регистрация: 27.11.2013
Сообщений: 10
По умолчанию

timerTimeSchet.Interval в милисекундах
Укропчик вне форума Ответить с цитированием
Старый 02.12.2013, 13:10   #10
aiken
Новичок
Джуниор
 
Регистрация: 25.10.2013
Сообщений: 1
По умолчанию Задача по С#

Здравствуйте! Помогите докончить задачу нужно сделать в производном классе bit_str метод арифметического сложения двух битовых строк str и str1

Вот задача
Описать базовый класс Строка.
Обязательные поля класса:
• поле для хранения символов строки;
• значение типа word для хранения длины строки в байтах.
Реализовать обязательные методы следующего назначения:
• конструктор без параметров;
• конструктор, принимающий в качестве параметра строковый литерал;
• конструктор, принимающий в качестве параметра символ;
• метод получения длины строки;
• метод очистки строки (сделать строку пустой).
Описать производный от Строка класс Битовая_строка.
Строки данного класса могут содержать только символы ‘0’ или ‘1’. Если в составе инициализирующей строки будут встречены любые символы, отличные допустимых, класс Битовая_строка принимает нулевое значение. Содержимое данных строк рассматривается как двоичное число.
Для класса Битовая_строка определить следующие методы:
• конструктор, принимающий в качестве параметра строковый литерал;
• деструктор;
• присваивание;
• вычисление арифметической суммы строк;
• проверка на равенство.
В случае необходимости более короткая битовая строка расширяется влево знаковым разрядом.


Вот код
Код.txt
aiken вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обмен строками между двумя приложениями LISTAT Общие вопросы Delphi 3 04.12.2011 15:43
Обмен данными между двумя процессами ReGreed Общие вопросы C/C++ 6 27.05.2011 15:31
Обмен данными между двумя формами в Delphi NecroSlider Помощь студентам 2 30.07.2009 11:52
Обмен данными между С++ и С# Stellvertreter Общие вопросы C/C++ 0 14.11.2008 14:18
Обмен данными между формами Maks1978 Общие вопросы C/C++ 3 22.07.2008 15:35