Я использую блок 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>
public partial class MainForm : Form
{
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
Тот же метод называется, но другой результат: работает с Button, не так, когда вы называете где -то еще ⇐ C#
Место общения программистов C#
1751672229
Anonymous
Я использую блок 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>
public partial class MainForm : Form
{
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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79690220/same-method-called-but-different-outcome-works-with-button-doesnt-when-called[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия