您可以通过这种方式实现您的目标。锁定的线程在线程池中是独立的,直到 ti 设置手动重置事件,所有代码都将等待,但您的 ui 不会冻结。
Private Sub test1(ByVal obj As Object)
If TypeOf (obj) Is ManualResetEvent Then
Dim _wait = DirectCast(obj, ManualResetEvent)
Thread.Sleep(5000)
_wait.Set()
End If
End Sub
Private Sub TestT_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
MsgBox("Operation started at " & Now)
Dim h As New List(Of ManualResetEvent)
Dim _wait As New ManualResetEvent(False)
h.Add(_wait)
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf test1), _wait)
WaitHandle.WaitAll(h.ToArray)
MsgBox("Operation completed at " & Now)
End Sub
在这里用c#(用在线工具检查代码翻译)
private void test1(object obj)
{
if ((obj) is ManualResetEvent) {
dynamic _wait = (ManualResetEvent)obj;
Thread.Sleep(5000);
_wait.Set();
}
}
private void TestT_Load(System.Object sender, System.EventArgs e)
{
Interaction.MsgBox("Operation started at " + DateAndTime.Now);
List<ManualResetEvent> h = new List<ManualResetEvent>();
ManualResetEvent _wait = new ManualResetEvent(false);
h.Add(_wait);
ThreadPool.QueueUserWorkItem(new WaitCallback(test1), _wait);
WaitHandle.WaitAll(h.ToArray());
Interaction.MsgBox("Operation completed at " + DateAndTime.Now);
}
但是我不明白你为什么要阻止 X 秒你的界面....