Я использую блок DVR для записи подводных камер. Чтобы иметь возможность сделать скриншот из конкретного канала из другого программного обеспечения, который я написал по сети, я пишу «сервер», который подключается к производителю DLL. Все в порядке, кроме одной функции.
Когда я звоню: < /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();
}
Я использую блок DVR для записи подводных камер. Чтобы иметь возможность сделать скриншот из конкретного канала из другого программного обеспечения, который я написал по сети, я пишу «сервер», который подключается к производителю DLL. Все в порядке, кроме одной функции. Когда я звоню: < /p> [code]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;