Несоответствие количества параметра

Первая вещь, которую я рекомендовал бы, состоит в том, чтобы познакомиться с различиями между версией блока и Версией файла. К сожалению.NET имеет тенденцию рассматривать их как то же когда дело доходит до файлов AssemblyInfo в этом, это обычно только помещает AssemblyVersion и позволяет FileVersion принимать значение по умолчанию к тому же значению.

, Так как Вы сказали, это - совместно используемая сборка, я предполагаю, что Вы подразумеваете, что она совместно используется на двоичном уровне (не включением проекта в различных решениях). Если это так, Вы хотите быть очень преднамеренными об изменении версии блока как, какая.NET использует для строгого имени блок (чтобы позволить Вам помещать его в GAC) и также составляет "полное имя блока". Когда изменения версии блока, это может иметь повреждающиеся изменения для приложений, которые используют его, не добавляя записи перенаправления блока в app.config файле.

Что касается именования, я думаю, что оно зависит от того, что Ваша компания, называющая правила, (если таковые имеются) и цель библиотеки. Для экс-клена, если эта библиотека обеспечивает "ядро" (или системный уровень) функциональность, которая не характерна ни для какого конкретного продукта или направления деятельности, Вы могли назвать его как:

CompanyName.Framework.Core 

, если это - часть более крупной библиотеки, или просто

CompanyName.Shared
CompanyName.Core
CompanyName.Framework

До, когда увеличить номера версий, это все еще довольно субъективно и зависит от того, что Вы полагаете, что каждая часть номера сборки представляет. Схема Microsoft по умолчанию является Главной. Незначительный. Сборка. Пересмотр, но это не означает, что Вы не можете придумать свои собственные определения. Самая важная вещь состоит в том, чтобы быть последовательной в Вашей стратегии и удостовериться, что определения и правила имеют смысл через все Ваши продукты.

почти В каждой схеме версии я видел, что первые две части являются Главными. Незначительный. Номер основной версии обычно увеличивает, когда существуют большие изменения и/или повреждающиеся изменения, в то время как номер вспомогательной версии обычно увеличивает, чтобы указать, что что-то изменилось, который сделал не было повреждающееся изменение. Другие два числа значительно более субъективны и могут быть "сборкой" (который часто является временами последовательное значение даты или последовательно обновляющее число, которое изменяется каждый день), и "пересмотр" или число патча. Я также видел их инвертированный (предоставление Главного. Незначительный. Пересмотр. Сборка), где сборка является последовательно увеличивающим числом от автоматизированной системы сборки.

Имеют в виду, что блок, основные и вспомогательные версии используются в качестве номера версии библиотеки типов, когда блок экспортируется.

Наконец, смотрите на некоторые из этих ресурсов для получения дополнительной информации:

http://msdn.microsoft.com/en-us/library/51ket42z.aspx

http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

http://blogs.msdn.com/suzcook/archive/2003/05/29/57148.aspx

16
задан BSchlinker 28 October 2009 в 11:17
поделиться

2 ответа

Я предполагаю, что ошибка связана с этой строкой:

label_sensorValue.Invoke(del,new object[] {tokens[1]});

Вы передаете del ( tokens [1] ) только один параметр, но у него есть два параметра (отправитель и e )

РЕДАКТИРОВАТЬ: после внимательного прочтения кода я предлагаю вам создать метод SetSensorValue для установки значения label_sensorValue . Прямо сейчас вы пытаетесь вызвать обработчик событий с неправильными параметрами.

private void data_INPUT(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    string data = serialPort.ReadLine();

    string[] tokens = data.Split(':');
    if (tokens[0] == "$SENSOR")
    {
        SetSensorValue(tokens[1]);
    }
}

delegate void SetSensorValueDelegate(string value);

private void SetSensorValue(string value)
{
    if (label_sensorValue.InvokeRequired)
    {
        SetSensorValueDelegate del = new SetSensorValueDelegate(SetSensorValue);
        label_sensorValue.Invoke(del, new object[] {value});
    }
    else
    {
        label_sensorValue.Text = value;
    }
}
17
ответ дан 30 November 2019 в 22:10
поделиться

Ваша проблема в том, что вы вызываете двухпараметрический делегат только с одним параметром.

Следующая строка

label_sensorValue.Invoke(del,new object[] {tokens[1]});

вызывает делегата в потоке пользовательского интерфейса с параметром tokens [1] .

Поскольку делегату требуются два параметра, он не работает. Кроме того, делегат ожидает объект и SerialDataReceivedEventArgs , а не строку.

Чтобы исправить это, вы должны вызвать анонимный метод вместо делегата.

Для пример (в C # 3):

label_sensorValue.Invoke(new Action(() => label_sensorValue.Text = tokens[1]));
4
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: