2012-06-20 4 views
2

Я пытаюсь привлечь к public static Bitmap, который является изображением моего PictureBox - Control. Рисунок работает отлично в том же потоке, но когда я начинаю вторую нить, ничего не происходит, ничего не рисуется. Кто-нибудь знает решение?C# draw to bitmap from 2nd thread

код рисовать:

Graphics g = Graphics.FromImage(screen); 
g.Clear(Color.Black);Brushes.White); 
g.Dispose(); 

// Edit:
Пожалуйста, простите меня. Битовая карта хранится в другом классе Form1. Класс threads - DrawHelper. Чтобы получить доступ к битовой карте, я дал DrawHelper ссылку Form1 на это (вызов из Form1).
Надеюсь, это поможет. Я могу опубликовать весь код, но будет так много ненужного кода.

+0

Нам понадобится больше кода, чем это. Мое подозрение, однако, было бы в том, что растровое изображение каким-то образом не делает переход между потоками. Что вы делаете для передачи информации? –

ответ

2

Ваше растровое изображение связано с контуром окна окна формы. если вы пытаетесь получить доступ к чему-то подобному, вы должны использовать Invoke или BeginInvoke.

Здесь: http://msdn.microsoft.com/en-us/library/ms171728.aspx

EDIT. После прочтения комментария я могу сказать вам, что у вас есть ошибка, и растровое изображение просто не получает информацию, которую, по вашему мнению, получает. Не имеет никакого отношения к использованию потоков per se ...

Если вам действительно нужно его решить, вы должны создать простой прототип с двумя нитями одной кнопкой и растровым изображением и просто попытаться нарисовать что-нибудь из потока №2 и посмотреть, что не работает. если даже это не сработает - напишите здесь код. (Пожалуйста, не копируйте и не вставляйте все приложение - держите его в определенной точке)

Также вы должны использовать try/catch внутри. Растровое изображение может вести себя так, как это делается просто потому, что внутри использования есть невидимое исключение.

+1

Я использую Invoke. Без Invoke я получаю исключение, как и ожидалось. – David

+1

Я вызываю. Теперь есть исключение. Растровое изображение просто не меняется. – David

+1

Извините за тройной пост * виноват *. Не исключение. – David