Свойства пользовательских элементов управления - C #, Forms - PullRequest
2 голосов
/ 29 мая 2010

Я добавляю пользовательский элемент управления в панель Flowlayout, это своего рода данные форекс, обновляются каждую секунду,

поэтому на каждом таймере я добавляю элемент управления, изменяю текст кнопки управления, затем добавляю его на панель разметки,

Я делаю это на каждом тайме 100 мс,

слишком много процессора,

вот мой пользовательский элемент управления.

public partial class UserControl1 : UserControl
{
    public void displaydata(string name, string back3price, string back3, string back2price, string back2, string back1price, string back1, string lay3price, string lay3 , string lay2price, string lay2, string lay1price, string lay1)
    {
        lblrunnerName.Text = name.ToString();

        btnback3.Text = back3.ToString() + "\n" + back3price.ToString();
        btnback2.Text = back2.ToString() + "\n" + back2price.ToString();
        btnback1.Text = back1.ToString() + "\n" + back1price.ToString();

        btnlay1.Text = lay1.ToString() + "\n" + lay1price.ToString();
        btnlay2.Text = lay2.ToString() + "\n" + lay2price.ToString();
        btnlay3.Text = lay3.ToString() + "\n" + lay3price.ToString();
    }    

и вот как я добавляю элемент управления;

private void timer1_Tick(object sender, EventArgs e)
{
    localhost.marketData[] md;

    md = ser.getM1();

    flowLayoutPanel1.Controls.Clear();

    foreach (localhost.marketData item in md)
    {
        UserControl1 ur = new UserControl1();
        ur.Name = item.runnerName + item.runnerID;
        ur.displaydata(item.runnerName, item.back3price, item.back3, item.back2price, item.back2, item.back1price, item.back1, item.lay3price, item.lay3, item.lay2price, item.lay2, item.lay1price, item.lay1);

        flowLayoutPanel1.SuspendLayout();
        flowLayoutPanel1.Controls.Add(ur);
        flowLayoutPanel1.ResumeLayout();
    }
}

теперь он срабатывает 10 раз при каждой отправке, занимая 60% моего процессора Core2Duo. я хочу обновить его быстро, мне нужны советы по оптимизации

Есть ли другой способ, я могу просто добавить элементы управления в первый раз, а затем изменять текст кнопок пользовательских элементов управления во время выполнения при каждом обновлении или отметке таймера

я использую c # .Net

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Чтобы получить доступ к элементу управления несколько раз, вам нужно сделать область видимости переменной больше, чем просто метод галочки. Смотрите пример создания переменной класса. Вы также можете поместить конструктор элемента управления в конструктор формы, и тогда тиковый метод будет работать только для изменения данных.

public MyForm : Form
{
    private UserControl _userControl = null;
    ...
    private void timer1_Tick(object sender, EventArgs e)
    {
        if (_userControl == null)
            //make control
        //set control data
    }
}
0 голосов
/ 29 мая 2010

это происходит 10 раз в секунду, потому что вы говорите это.

есть 1000 мс в секунду

если вы делаете это каждые 100 мс, то вы выполняете действие 10 раз в секунду.


Хорошо, здесь происходит несколько вещей. Во-первых, вам нужно сохранить обработчик или имя для различных элементов управления, которые должны быть обновлены. Это может быть сделано либо через определенный объект, либо с помощью FINDCONTROL ("ControlName").

Теперь, для вашей проблемы с доступом к элементу управления в элементе управления таймером, это связано с THREADS! Код внутри события Timer_Elapsed происходит в отдельном потоке, что влияет на пользовательский интерфейс, необходимый для обеспечения безопасности вашего потока кода.

Рассмотрим эти объекты:

// The declaration of the textbox.
private TextBox m_TextBox;
public delegate void UpdateTextCallback(string text);

Тогда у вас будет метод, который выполняет фактическое изменение

// Updates the textbox text.
private void UpdateText(string text)
{
  // Set the textbox text.
  m_TextBox.Text = text;
}

А потом в отдельной ветке позвоните через

m_TextBox.Invoke(new UpdateTextCallback(this.UpdateText),  new object[]{”Text generated on non-UI thread.”});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...