У VB6 был метод DoEvents(), который вы вызывали, чтобы вернуть управление ОС и имитировать многопоточное поведение в этой однопоточной среде.
Что такое эквивалент .NET Framework VB 6 DoEvents()?
У VB6 был метод DoEvents(), который вы вызывали, чтобы вернуть управление ОС и имитировать многопоточное поведение в этой однопоточной среде.
Что такое эквивалент .NET Framework VB 6 DoEvents()?
Application.DoEvents() (часть WinForms)
вы можете использовать Application.DoEvents()
. Почему бы не использовать класс Threading или просто Фоновые работники? Если вы работаете в среде .net, не используйте DoEvents
. Оставьте его на VB6.
Ниже приведен общий метод типа DoEvents.
using System;
using System.Windows.Threading;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Permissions;
namespace Utilites
{
/// <summary>
/// Emulates the VB6 DoEvents to refresh a window during long running events
/// </summary>
public class ScreenEvents
{
[SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public static void DoEvents()
{
DispatcherFrame frame = new DispatcherFrame();
Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Background,
new DispatcherOperationCallback(ExitFrame), frame);
Dispatcher.PushFrame(frame);
}
public static object ExitFrame(object f)
{
((DispatcherFrame)f).Continue = false;
return null;
}
}
}
Не нужно знать о приложении.
Если вы вызываете Application.DoEvents() в свой код, ваше приложение может обрабатывать другие события. Например, если у вас есть форма, которая добавляет данные в ListBox и добавляет DoEvents в ваш код, ваша форма будет перерисовываться при перетаскивании другого окна. Если вы удалите DoEvents из своего кода, ваша форма не будет перерисовываться до тех пор, пока обработчик события нажатия кнопки не будет выполнен. Дополнительные сведения о обмене сообщениями см. В разделе "Вход пользователя в Windows Forms".
В отличие от Visual Basic 6.0, метод DoEvents не вызывает метод Thread.Sleep.