【发布时间】:2012-03-16 09:56:07
【问题描述】:
我对“线程”有疑问。我希望有两个在单独的过程中工作的“表单”,例如,如果我从一个“表单”打开一个“OpenFileDialog”,另一个“表单”单独工作并做其他事情。 (请参阅我的代码,我对我的错误描述感到抱歉。)
我使用了一个“线程”,它工作正常。但如果我的“表单”有“ContextMenuStrip”控件,则会出现“跨线程操作无效”错误。 请帮帮我。
谢谢。
================================================ ==================================== 主窗体:
Public Class FormMain
Private Sub cmdShow_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdShow.Click
Form2.ShowMe()
End Sub
End Class
================================================ ==================================== 表格2:
Public Class Form2
'Me.ContextMenuStrip1 = New System.Windows.Forms.ContextMenuStrip(Me.components)
'Me.Panel1 = New System.Windows.Forms.Panel
'Me.Panel1.ContextMenuStrip = Me.ContextMenuStrip1
Public Shared Thread_2 As System.Threading.Thread
Public MyDefaultWindowState = FormWindowState.Normal
Private Delegate Sub dlgShowMe()
Public Sub ShowMe()
If Thread_2 IsNot Nothing AndAlso Thread_2.ThreadState = Threading.ThreadState.Running Then
If Me.InvokeRequired Then
Dim d As New dlgShowMe(AddressOf Me.ShowMe)
Me.Invoke(d)
Else
Show_Activate_()
End If
Else
Thread_2 = New System.Threading.Thread(AddressOf Me.Show_View_)
Thread_2.SetApartmentState(System.Threading.ApartmentState.STA)
Thread_2.IsBackground = False
Thread_2.Start()
End If
End Sub
Private Sub Show_Activate_()
Try
Me.Enabled = True
Me.ShowInTaskbar = True
Me.WindowState = Me.MyDefaultWindowState
Me.BringToFront()
Me.Activate()
Catch ex As Exception
MsgBox(ex.Message, , "Show_Activate_")
End Try
End Sub
Private Delegate Sub dlgShow_View_()
Private Sub Show_View_()
Me.Enabled = True
Me.ShowInTaskbar = True
Try
Me.ShowDialog()
Catch ex As Exception
MsgBox(ex.Message, MsgBoxStyle.Critical,"Show_View_")
End Try
End Sub
Private Sub cmdOpenFileDialog1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdOpenFileDialog1.Click
OpenFileDialog1.ShowDialog()
End Sub
End Class
================================================ =
这是我的源代码: http://www.mediafire.com/?m8e8i51rr51a35i [63KB]
运行“FormMain”。 单击“cmdShow”。 当显示“Form2”时。右键单击“面板1”。 'ContextMenuStrip1' 将会出现。
关闭'Form2.
再次单击“cmdShow”。 当显示“Form2”时。再次右键单击“Panel1”。 但你可以看到错误...
【问题讨论】:
-
你应该把相关代码贴在这里,不要强迫我们去点击未知的外部链接。
-
同样,我没有下载任何代码来找出问题所在。
标签: vb.net multithreading