Почему моя функция рисования не работает при вызове в другом потоке? - PullRequest
0 голосов
/ 19 марта 2012

Я делаю клиента, который подключается к серверу и отправляет и получает данные. Но когда функция draw вызывается из принимающего потока, она ничего не рисует. Хотя, если я позвоню с моей кнопки, она прорисовывается правильно. Может кто-нибудь помочь мне, пожалуйста?

Примечание. Работает с кнопки, когда я передаю параметры, а не с другого потока, получающего сообщения.

  • x - это х, где рисовать
  • y это у того, где рисовать
  • b блок для рисования

Метод GetColor() работает - я протестировал его, и он правильно рисует с кнопки, но не из моего потока получения.

public void Draw(int x, int y, int b)
{
    MessageBox.Show(x + " " + y + " " + b);
    Graphics g = this.CreateGraphics();
    Pen pen = new Pen(getcolor(b), 1);
    g.FillRectangle(pen.Brush, x, y, 1, 1);
}

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

public void Draw (int x, int y, int b) {

    if (this.InvokeRequired)
    {
        // Reinvoke the same method if necessary        
        BeginInvoke(new MethodInvoker(delegate() { Draw(x, y, b); }));
    }
    else
    {
        MessageBox.Show(x + " " + y + " " + b);
        Graphics g = this.CreateGraphics();
        Pen pen = new Pen(getcolor(b), 1);
        g.FillRectangle(pen.Brush, x, y, 1, 1);
    }}

Спасибо

1 Ответ

2 голосов
/ 19 марта 2012

Вы можете использовать InvokeRequired и Invoke, чтобы гарантировать, что функция Draw вызывается потоком GUI!

...