Keresés

Új hozzászólás Aktív témák

  • x007

    tag

    válasz sunsaw #1229 üzenetére

    Jaaaa, WPF-ben nincsen gyári DoEvents, viszont van workaround:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
    button1.IsEnabled = false;

    WpfApplication.DoEvents();
    Thread.Sleep(3000);

    button1.IsEnabled = true;
    }


    /// <summary>
    /// Designates a Windows Presentation Foundation application model with added functionalities.
    /// </summary>
    public class WpfApplication : Application
    {
    private static DispatcherOperationCallback exitFrameCallback = new
    DispatcherOperationCallback(ExitFrame);

    /// <summary>
    /// Processes all UI messages currently in the message queue.
    /// </summary>
    public static void DoEvents()
    {
    // Create new nested message pump.
    DispatcherFrame nestedFrame = new DispatcherFrame();

    // Dispatch a callback to the current message queue, when getting called,
    // this callback will end the nested message loop.
    // note that the priority of this callback should be lower than the that of UI event messages.
    DispatcherOperation exitOperation = Dispatcher.CurrentDispatcher.BeginInvoke(
    DispatcherPriority.Background, exitFrameCallback, nestedFrame);

    // pump the nested message loop, the nested message loop will
    // immediately process the messages left inside the message queue.
    Dispatcher.PushFrame(nestedFrame);

    // If the "exitFrame" callback doesn't get finished, Abort it.
    if (exitOperation.Status != DispatcherOperationStatus.Completed)
    {
    exitOperation.Abort();
    }
    }

    private static Object ExitFrame(Object state)
    {
    DispatcherFrame frame = state as DispatcherFrame;

    // Exit the nested message loop.
    frame.Continue = false;
    return null;
    }
    }

    Megjegyzem, hogy ez továbbra se fogja teljes mértékig megoldani a problémát, mert az ablak ugyanúgy meg fog fagyni a DB kapcsolat tesztelésekor. (WinForms esetén is így lenne) Szóval mindenképpen javaslom a BackGroundWorker használatát.

Új hozzászólás Aktív témák