Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Проблема


Автор: JTV 6.5.2013, 11:48
Здравствуйте! Очень нужна ваша помощь. Я написала программу, где я запуская несколько потоков, и просто наблюдаю процесс, как эти потоки меняют одну картинку на другую.
Все было бы очень хорошо, если бы не возникала ошибка(когда, как я понимаю несколько потоков сразу пытаются изменить ее) .
Как сделать так, чтобы только один поток обращался к PictureBox? Т. е. посредством каких функций или еще чего-нибудь я могу ограничить доступ к picturebox, чтобы получилось что-то вроде очереди? Ну, или просто, может, кто-нибудь знает решение этой проблемы....
пишу в visual studio 2010
Ссылка на возникающую ошибку http://s1.ipicture.ru/uploads/20130506/lJggTQek.jpg
Код

Imports System.Drawing
Imports System
Imports System.Threading

Public Class Form1
    Shared a(0 To 2) As Thread, ID As Integer

    Function m(ByVal i As Integer) As Double
        While 1 < 2
            Randomize()
            Thread.Sleep(Rnd(10000))
                Me.Pic.Image = System.Drawing.Bitmap.FromFile("C:\Users\ЮЛЯ\Documents\Visual Studio 2010\Projects\jttttttttt\jttttttttt\Resources\вилка с ложкой.png")
                Me.Pic.Image = System.Drawing.Bitmap.FromFile("C:\Users\ЮЛЯ\Documents\Visual Studio 2010\Projects\jttttttttt\jttttttttt\Resources\captain.png")
        End While
        Return 0
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For j = 0 To 2
            a(j).Start()
            'TextBox1.Text = TextBox1.Text + "\n" + Str(ID)
        Next

    End Sub

    Private Sub Form1_Load_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        For j = 0 To 2
            a(j) = New Thread(AddressOf m)
        Next
    End Sub
End Class



Автор: Akina 6.5.2013, 11:56
Используйте любое средство синхронизации потоков. 
Скажем, поток, намеренный работать с объектом, создаёт мьютекс с предопределённым именем... если удачно - то работает, а по окончании прибивает мьютекс, если неудачно - объект захвачен, и надо ждать своей очереди, периодически пытаясь снова создать мьют (получить право на работу).

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)