Когда я звоню: < /p>
Код: Выделить всё
channelList = Native.GetEncoderStatus();
< /code>
Из моего метода инициализации (после начала связи с программным обеспечением DVR для получения другого статуса), он возвращает пустую строку. < /p>
Но если я использую событие, связанное с кнопкой: < /p>
private void buttonGetEncoders_Click(object sender, EventArgs e)
{
channelList = Native.GetEncoderStatus();
labelDVRChannels.Text = channelList;
Console.WriteLine(channelList);
}
< /code>
У меня есть правильная строка. < /p>
Для меня нет разницы. Из любопытства я пытался позвонить в метод много раз (пока у меня не будет правильного ответа) или с разным временем. Все еще ничего. < /P>
Я даже попробовал < /p>
buttonGetEncoders_Click(this, EventArgs.Empty);
< /code>
Без повезло. Похоже, что этот метод работает только «вручную». < /P>
Я толкаю в темноте. У кого -нибудь есть представление о том, что я делаю не так? Я запускаю код в Winform: < /p>
Общественный частичный класс Mainform: form
{< /p>
Settings settings = Settings.Default;
BackgroundWorker timer;
BackgroundWorker worker;
UDP_Socket socket;
string host;
bool statusInit;
string channelList = "";
string[] channels;
public MainForm()
{
InitializeComponent();
labelInitStatus.Text = "";
textBoxAddress.Text = settings.Address;
textBoxPort.Text = settings.Port;
timer = new BackgroundWorker();
timer.WorkerReportsProgress = false;
timer.WorkerSupportsCancellation = true;
timer.DoWork += Timer_DoWork;
timer.RunWorkerCompleted += Timer_RunWorkerCompleted;
timer.RunWorkerAsync();
}
private void Timer_RunWorkerCompleted(object? sender, RunWorkerCompletedEventArgs e)
{
InitialiseDVR();
}
private void Timer_DoWork(object? sender, DoWorkEventArgs e)
{
for (int i = 10; i > -1; i--)
{
labelInformations.BeginInvoke(new Action(() => { labelInformations.Text = $"Starting in {i.ToString()}s"; }));
Thread.Sleep(1000);
}
}
private void InitialiseDVR()
{
Console.WriteLine("InitialiseDVR");
bool init = false;
for (int i = 0; i line.Split(',')[0]).OrderBy(channel => channel).ToArray();
labelDVRChannels.Text = string.Join("\r", channels);
Thread.Sleep(500);
}
//channelList = Native.GetEncoderStatus();
//Console.WriteLine(channelList);
//string[] lines = channelList.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
//channels = lines.Select(line => line.Split(',')[0]).OrderBy(channel => channel).ToArray();
//labelDVRChannels.Text = string.Join("\r", channels);
}
}
private void buttonGetEncoders_Click(object sender, EventArgs e)
{
channelList = Native.GetEncoderStatus();
Console.WriteLine(channelList);
string[] lines = channelList.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries);
channels = lines.Select(line => line.Split(',')[0]).OrderBy(channel => channel).ToArray();
labelDVRChannels.Text = string.Join("\r", channels);
}
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
Console.WriteLine("Exit");
Native.Exit();
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... hen-called