Подскажи как ссылку делать на метод/класс и т.д. На тех ресурсах что вы мне давали не раскрывается вопрос решения моей проблемы. Вот как выглядит моя программа в общих чертах:
namespace D
{
public partial class Mainwindow : Form
{
//---------------------------------------------------------------------------------------
//Глобальные переменные
public string s;
// --------------------------------------------------------------------------------------
//=====================================================================================
public Mainwindow()
{
InitializeComponent();
Visible = false;
Dialogbox.ReadOnly = true;
выходToolStripMenuItem.Enabled = false;
выходToolStripMenuItem.Visible = false;
Point tempPoint = new Point(100, 100);
this.DesktopLocation = tempPoint;// почему-то не работает
}
//======================================================================================
private void button1_Click(object sender, EventArgs e)
{
s = message.Text;
if (s != "")
{
Random random = new Random();
var additionalText = s + "\n";
var start = Dialogbox.Text.Length;
var length = additionalText.Length;
Dialogbox.AppendText(additionalText);
Dialogbox.Select(start, length);
Dialogbox.SelectionAlignment = HorizontalAlignment.Left;
message.Text = "";
Thread thd = new Thread(Th);
thd.Start();
}
}
// ====================================================
public void Th()
{
if (s != "112")
{
// Обработка полученной переменной, составление выводимых данных в нее же.
var additionalText = s + "\n";
if (Dialogbox.InvokeRequired) //Если обратились к контролу не из того потока, в котором конрол был создан, то...
Dialogbox.Invoke((Action)Thinks); //Вызываем этот же метод через Invoke
else
{
answer(additionalText);
}
}
else
{
if (Dialogbox.InvokeRequired) //Если обратились к контролу не из того потока, в котором конрол был создан, то...
Dialogbox.Invoke((Action)Thinks); //Вызываем этот же метод через Invoke
else
{
//работаем с другим компонентом этой формы
}
}
}
//======================================================
private void answer(string additionalText)
{
var start = Dialogbox.Text.Length;
var length = additionalText.Length;
Random random = new Random();
Dialogbox.AppendText(additionalText);
Dialogbox.Select(start, length);
Dialogbox.SelectionAlignment = HorizontalAlignment.Right;
Dialogbox.Select();
Dialogbox.Select(Dialogbox.Text.Length, 0);
Dialogbox.ScrollToCaret();
}
}
}
Причиной того что окно подвисает во время выполнения скорее всего в том что смысла в моем коде как в куске *****...
Скорее всего (я уверен на 70% с небольшим) что метод Invoke вторгается в поток формы, поэтому функция выполняется два раза (первый в фоне, второй после вызова Th в Invoke) и повторно делает вычисления.
Бред в том что если делать эту проверку в answer, то я не смогу получить строку на выход.
Остается тогда извращаться: добавлять переменную, которая будет регулировать второй вход и пропускать вычисления.