Я нашел решение, оно работает над моей системой (Gigabit Ethernet PCI Express RTL8111/8168B + Ubuntu 12.04 AMD64). Этот отчет об ошибках описывает проблему, и кто-то предположил, что использование r8168 модуля вместо r8169 модуля добьется цели. Также где-то в другом месте я видел, что это может быть сделано через dkms, но я спешу этим утром, не получил шанс посмотреть, это могло бы помочь
wget http://r8168.googlecode.com/files/r8168-8.030.00.tar.bz2
tar xjf r8168-8.030.00.tar.bz2
cd r8168-8.030.00
./autorun.sh
, Хотя я делал это по ssh, он на самом деле работал, соединение, просто заблокированное некоторое время, но взял снова после того, как новый модуль установил.
Сначала я задался вопросом, почему OP еще не пометил один из ответов как ответ, но после того, как попробовал сам и все еще не работал, Я копнул немного глубже и обнаружил, что в этой проблеме гораздо больше, чем я предполагал вначале.
Лучшее понимание можно получить, прочитав аналогичный вопрос: Почему не удается контролировать обновление / обновление в середине процесса
Наконец, для записи, я смог обновить свой лейбл, выполнив следующее:
private void SetStatus(string status)
{
lblStatus.Text = status;
lblStatus.Invalidate();
lblStatus.Update();
lblStatus.Refresh();
Application.DoEvents();
}
Хотя, насколько я понимаю, это далеко не изящный и правильный подход к этому. Это взлом, который может работать или не работать в зависимости от того, насколько загружен поток.
Вызов label.Invalidate
, а затем label.Update ()
- обычно обновление происходит только после выхода из текущей функции, но вызов Update заставляет его для обновления в этом конкретном месте кода.
Из MSDN :
Метод Invalidate определяет, что окрашивается или перекрашивается. Когда происходит рисование или перерисовка, управляет метод Update. Если вы используете методы Invalidate и Update вместе, а не вызываете Refresh, то, что будет перерисовано, зависит от того, какую перегрузку Invalidate вы используете. Метод Update просто вызывает немедленную отрисовку элемента управления, но метод Invalidate определяет, что отрисовывается при вызове метода Update.
Очень заманчиво захотеть "исправить" это и принудительно обновить пользовательский интерфейс, но лучшее решение - сделать это в фоновом потоке, а не связывать поток пользовательского интерфейса, чтобы он все еще мог реагировать на события.
Вызов Application.DoEvents ()
после установки метки, но вместо этого вы должны выполнять всю работу в отдельном потоке, чтобы пользователь мог закрыть окно.
Попробуйте вызвать label.Invalidate ()
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.invalidate (VS.80) .aspx
вы можете попробовать это
using System.Windows.Forms; // u need this to include.
MethodInvoker updateIt = delegate
{
this.label1.Text = "Started...";
};
this.label1.BeginInvoke(updateIt);
Посмотрите, работает ли это.