Vb.net 如何:强制用户在从winform中选择内容之前对其进行聚焦

Vb.net 如何:强制用户在从winform中选择内容之前对其进行聚焦,vb.net,winforms,Vb.net,Winforms,我正在处理一个使用WinForms的项目,当用户在窗体上单击控件而该窗体不是活动窗口时,我遇到了并发问题。每当用户激活我的表单以防止它们显示旧/脏信息时,我的表单都会刷新,但如果他们单击非活动表单上的按钮,则数据不会刷新,这可能会导致问题 我知道windows中的某些程序会强制您在执行任何其他操作之前选择窗口,在我的VB.NET程序中是否有这样做的方法?此代码在我的测试中运行,但必须处理一些问题才能按需运行: Dim mystts As Boolean = False Private Sub

我正在处理一个使用WinForms的项目,当用户在
窗体
上单击控件而该窗体不是活动窗口时,我遇到了并发问题。每当用户激活我的表单以防止它们显示旧/脏信息时,我的表单都会刷新,但如果他们单击非活动
表单上的按钮,则数据不会刷新,这可能会导致问题


我知道windows中的某些程序会强制您在执行任何其他操作之前选择窗口,在我的VB.NET程序中是否有这样做的方法?

此代码在我的测试中运行,但必须处理一些问题才能按需运行:

Dim mystts As Boolean = False

Private Sub Form2_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
    'here your process, unfortunately this will be performed too after messagebox close back to form2
    'for example the process are:
    For myCnt As Integer = 1 To 4000
        Debug.Print("Test") 'This only for waiting
    Next
    mystts = False
End Sub

Private Sub Form2_Deactivate(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate
    'we must define the other criteria for make mystts=true, for example if 
    'we call messageBox.show, we can pass out from this for example we have msgFlag
    'before call messageBox set msgFlag=true and after it set  msgFlag=false
    'and here you add: if msgFlag=true then exit sub
    mystts = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    'if we click this button and myStts=true, the next process will wait until process in form activate finish
    MsgBox("this My Process, run after form2 activated and process finish")
End Sub 

它没有机会刷新数据
-为什么?当它的按钮被点击时,它会激活,不是吗?你有一些异步处理吗?因此,当有人点击某个东西时,异步的东西还没有完成,你会得到异常/错误行为?你可以设置变量状态,并在刷新任何东西时将其设置为真,完成后将状态设置为假。在你的按钮点击中,如果状态是真的,什么也不做,但是如果状态是假的,按正常的方式执行它非常模糊,听起来像按钮的点击事件在做一些非常顽皮的事情。比如挂起主线程的时间太长,没有足够的并发性。用户输入总是在任何挂起的重新绘制之前处理。将Me.Update()作为事件处理程序中的第一条语句,以便在代码消失之前重新绘制。