Тот же метод называется, но другой результат: работает с Button, не так, когда вы называете где -то ещеC#

Место общения программистов C#
Ответить
Anonymous
 Тот же метод называется, но другой результат: работает с Button, не так, когда вы называете где -то еще

Сообщение 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>
Общественный частичный класс 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»