Обновить элемент интерфейса другого класса из потока - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь обновить форму интерфейса другого класса, который находится внутри потока.

Соответствующий код:

MainWindow.xaml.cs

private void encryptButtonPressed(object sender, RoutedEventArgs e)
{
    if (checkValues() == true)
    {
        updateConsole("Starting Encryption...");

        Thread encryptThread = new Thread(encrypt);
        encryptThread.Start();
    }
}

функция шифрования

public void encrypt()
{
    Encrypt encrypt = new Encrypt(this.KeyFileContent, this.SourcePath, this.DestinationPath, this);
    encrypt.start();
}

обновление функции консоли

public void updateConsole(String text)
{
    consoleWindow.AppendText(Environment.NewLine);
    consoleWindow.AppendText(text);

    consoleWindow.ScrollToEnd();
}

Encrypt.cs

public byte[] key;
public String source;
public String destination;
public MainWindow mainWindow;

public Encrypt(byte[] key, String source, String destination, MainWindow mainWindow) 
{
    this.key = key;
    this.source = source;
    this.destination = destination;
    this.mainWindow = mainWindow;
}

функция запуска

public void start()
{
    mainWindow.updateConsole("Updating form thread");
}

Я пытался

Dispatcher.Invoke(() =>
    {
        mainWindow.updateConsole("Updating form thread");
    });

но бесполезно.

1 Ответ

0 голосов
/ 26 апреля 2018

Вместо того, чтобы вводить целые mainWindow, вам нужно только передать то, что вам нужно. В этом случае метод updateConsole.

изменить метод запуска следующим образом:

public void start(Action<string> updateConsole)
{
    updateConsole.Invoke("Updating form thread");
}

тогда вы сможете использовать метод следующим образом:

public void encrypt()
{
    Encrypt encrypt = new Encrypt(this.KeyFileContent, this.SourcePath, this.DestinationPath, this);
    start(updateConsole);
}

Наконец, вам больше не нужно вводить в mainWindow ваш класс Encrypt:

public byte[] key;
public String source;
public String destination;

public Encrypt(byte[] key, String source, String destination) 
{
    this.key = key;
    this.source = source;
    this.destination = destination;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...