Я хочу написать текст в текстовое поле. Чтобы иметь возможность делать это из разных потоков, я вызываю статический метод, который вызывает нестатический метод, который содержит вызов и текстовое поле. При этом. Я получаю сообщение об ошибке, что он не может вызывать до тех пор, пока не будет установлен дескриптор Windows, поэтому я его установлю. Моя проблема в том, что позицияInvoke looping/crashing
if (!this.IsHandleCreated)
this.CreateHandle();
ниже в коде только один, где моя программа не рухнет, но теперь это зацикливание (indefinetly) только код BeginInvoke, но на самом деле не текстовый параметр код ниже. Что я делаю не так?
Код:
private void ActualLog(string input)
{
var currentForm = form as Main;
if (!this.IsHandleCreated)
this.CreateHandle();
if (currentForm.txtServerLog.InvokeRequired)
{
this.BeginInvoke(new Action<string>(ActualLog), new object[] { input });
return;
}
else
{
currentForm.txtServerLog.Text += input + "\r\n";
currentForm.txtServerLog.Refresh();
}
}
public static void Log(string input)
{
Main main = new Main();
main.ActualLog(input);
}
С моей темы, я бы назвал Log("Any String");
@JanH. Я не уверен на 100%, что вы пытаетесь сделать, но я включил образец выше. – furkle
Спасибо! При использовании Invoke вместо BeginInvoke в вашем примере это работает. Дело в двух функциях состояло именно в том, чтобы я мог вызвать Log() из annother Thread, поскольку Invoke не разрешен в статической функции (поэтому я просто ставил его в нестационарную и называет его статическим). Но спасибо anyways :) –
@JanH. Ах, я трачу больше времени на WPF, чем на WinForms, поэтому я немного ржавчу в разграничении Invoke/BeginInvoke. Рад, что это помогло! – furkle