Правила Форума редакция от 22.06.2020 |
|
|
|
|
|
Опции темы | Опции просмотра | Language |
15.02.2011, 14:10 | #61 |
Re: Вопросы по C#
При программировании столкнулся с тем что при using System.Drawing; VS 2010 пишет что нет такого пространства имен. Пробовал обновить/переустановить фреймворк 4, не помогло. Может кто подскажет как это исправить .
Все, исправил (надо было добавить ссылки к проекту) Последний раз редактировалось gluik; 15.02.2011 в 14:18.. |
|
Реклама: | Рекомендуем гипермаркет КНС.ру - CyberPower UTC650EI - билеты на футбол в подарок каждому покупателю | Магазин KNSneva.ru предлагает razer ноутбук - специальные условия для корпоративных клиентов в Санкт-Петербурге. | обеденные круглые столы | табурет винтовой для пром машинок | мышкин на теплоходе из москвы |
11.05.2011, 12:51 | #62 |
Новичок
Пол: Регистрация: 21.04.2007
Сообщений: 13
Репутация: 4
|
Re: Вопросы по C#
|
11.08.2011, 11:29 | #63 |
Неактивный пользователь
Пол: Регистрация: 11.08.2011
Сообщений: 4
Репутация: 0
|
Re: Вопросы по C#
Есть ли хорошие, годные книги по SharePoint 2010 именно с точки зрения developer'a?
|
24.03.2012, 23:06 | #64 |
Неактивный пользователь
Пол: Регистрация: 02.06.2010
Сообщений: 10
Репутация: 0
|
Re: Вопросы по C#
Всем привет!
мне нужно определять имя учетной записи пользователя, использую System.Environment.UserName или System.Security.Principal.WindowsIdentity.GetCurre nt(). на первый взгляд все ОК. Но, бывает что у пользователя нет администраторских прав на компьютере и нет возможности записывать информацию в некоторые каталоги, поэтому приложение запускаю, например, "от имени администратора" и после этого определяется имя пользователя от имени кого было запущено приложение, а не имя пользователя, который выполнил вход в систему windows, так вот, как определить именно пользователя, который зарегистрировался в системе?) |
26.03.2012, 09:48 | #65 |
Постоялец
Пол: Регистрация: 02.07.2009
Сообщений: 393
Репутация: 79
|
Re: Вопросы по C#
При запуске от имени адмнистратора, создаётся отдельный сеанс, который завершается при завершение приложения. Определить как зщапущен сеанс наверняка можно, только я не знаю как. Но вообще, это дурной тон писать приложения, требующие администраторских прав. Как минимум, возникнут проблемы у конечного пользователя при их запуске.
__________________
Каждый человек, которому вы ответили на форуме "гугл в помощь" - потенциальный "возвращенец" в винды. (ц) |
26.03.2012, 13:40 | #66 |
Re: Вопросы по C#
лучше добавь в проект манифест где выставь обязательность запуска от имени администратора http://msdn.microsoft.com/en-us/library/bb756929.aspx
|
|
23.07.2012, 23:09 | #67 |
Новичок
Пол: Регистрация: 29.12.2007
Сообщений: 22
Репутация: 2
|
Re: Вопросы по C#
Всем доброго времени суток...
У меня следующая трабла. Работаю над чем то типа месенджера, работающего напрямую через MySQL. Проблема в том что со временем прога начинает подвисать. Дело в том что коннекты к бд у меня очень частые, я думал что проблема в том что не чищу ресурсы, но это не так... Не могу придумать решения.. |
24.07.2012, 12:14 | #68 |
Re: Вопросы по C#
Так не видя кода, трудно что-то сказать. коннекшкны открывать надо используя using(Connection conn = new Connection()){......} чтоб автоматически ресурсы освобождались, но если подвисает, то подозреваю, что проблема в утечке памяти либо из-за мультисридинга, либо из-за кэша.
З.Ы. Ты случайно не ICQSharp пользуешь? в нем проблемы с таймером потоков, из-за этого проц грузится сильно. Последний раз редактировалось Svintuss; 24.07.2012 в 12:18.. |
|
24.07.2012, 22:59 | #69 |
Новичок
Пол: Регистрация: 29.12.2007
Сообщений: 22
Репутация: 2
|
Re: Вопросы по C#
Для конекта юзаю библиотеку MySQL Connector .NET, но при вызове собитя таймера то я просто открываю конекшн высылаю запрос и закрываю, память да, нарастает... но не знаю почему...
Код:
private void timer1_Tick(object sender, EventArgs e) { timer1.Stop(); try { MySqlConnection myConnection = new MySqlConnection(myConnectionString); MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection); myConnection.Open(); string str = myCommand.ExecuteScalar().ToString(); myConnection.Close(); myCommand.Dispose(); myConnection.Dispose(); } catch (Exception ex) { //MessageBox.Show("Ошибка: " + ex.Message); } timer1.Enabled = true; } } |
25.07.2012, 00:29 | #70 |
Re: Вопросы по C#
ага, MySQL Connector .NET. Знаем, плавали.
подозреваю, что тормоза из-за того что ты стопаришь таймер. Лучше используй lock для захвата ресурсов на время работы функции. Тогда другой поток будет ждать пока ресурс не освободится. Кстати, какой у тебя выставлен интервал? тормоза могут быть и из-за слишком короткого интервала. дальше myConnection.Close(); myCommand.Dispose(); myConnection.Dispose(); не рекомендую использование блока using() делает это все автоматически. Кроме того Dispose только помечает объект на удаление. если хочешь действительно удалять объект то надо вызывать GC.Collect() сразу после диспозов. Но твоя проблема врятли в этом. может быть еще конечно, что запрос длится слишком долко и поток висит пока он не отработает добавляя все новые и новые запросы в очередь на выполнение. таким образом я бы делал что-то типа Код:
public class Worker { private static System.Threading.Timer timer; // обеспечивает каждые тик в отдельном потоке private static bool isBussy = false; /// <summary> /// Starts timer /// </summary> /// <param name="period">tomer work period(miliseconds)</param> public void Run(int period) { if (timer == null) timer = new Timer(new TimerCallback(timer_OnCallBack)); timer.Change(0, period); } private static void timer_OnCallBack(object state) { if(isBussy) return; isBussy = true; try { using (MySqlConnection myConnection = new MySqlConnection(myConnectionString)) { using (MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection)) { myConnection.Open(); string str = myCommand.ExecuteScalar().ToString(); } } } catch (Exception ex) { //MessageBox.Show("Ошибка: " + ex.Message); } finally { isBussy = false; } } } |
|
25.07.2012, 07:03 | #71 |
Новичок
Пол: Регистрация: 29.12.2007
Сообщений: 22
Репутация: 2
|
Re: Вопросы по C#
эээ, не люблю многопоточность, так и не въехал как передавать данные в главный поток...
Если можешь, подскажи как вывести ту переменную str, скажем, в textBox1.. насчет делегатов в курсе, но заработать так и не смог заставить и да, интервал 1 сек, а зппросы должны выполнять быстро ибо бд пока что на локале... Последний раз редактировалось Zewirus; 25.07.2012 в 07:05.. |
25.07.2012, 12:28 | #72 | |||||||||||||||||||||||
Re: Вопросы по C#
В приведенном примере мультипоточность очень простая. тебе не нужно ни создавать потоки вручную, ни отслеживать их завершение. Таймер все делает сам. 1 секунда очень мало для твоего таймера. все программа висит пока не отработает запрос, а как только он отрабатывает программа опять виснет т.к. начинается новый запрос. Мультипоточный таймер решил бы эту проблему. Передача данных очень простая, т.к. Invoke имеет перегрузку принимающую параметры для делегата. Передачу данных можно сделать следующим образом Код:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private static System.Threading.Timer timer; // обеспечивает каждые тик в отдельном потоке private static bool isBussy = false; public TextBoxEx tb = new TextBoxEx(); public Form1() { InitializeComponent(); tb.Width = 200; this.Controls.Add(tb); RunTimer(1000); } /// <summary> /// Starts timer /// </summary> /// <param name="period">timer work period(miliseconds)</param> public void RunTimer(int period) { if (timer == null) timer = new System.Threading.Timer(new System.Threading.TimerCallback(timer_OnCallBack)); timer.Change(0, period); } private void timer_OnCallBack(object state) { if (isBussy) return; isBussy = true; try { //using (MySqlConnection myConnection = new MySqlConnection(myConnectionString)) { //using (MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection)) { //myConnection.Open(); tb.Invoke(tb.ApplyMessage, DateTime.Now.ToString()); //tb.Invoke(tb.ApplyMessage, myCommand.ExecuteScalar().ToString()); } } } catch (Exception ex) { //MessageBox.Show("Ошибка: " + ex.Message); } finally { isBussy = false; } } } public class TextBoxEx : TextBox { public delegate void ApplyMessageDelegate(string message); public ApplyMessageDelegate ApplyMessage; public TextBoxEx(): base() { ApplyMessage = new ApplyMessageDelegate(OnApplyMessage); } private void OnApplyMessage(string message) { this.Text = message; } } } |
||||||||||||||||||||||||
25.07.2012, 18:11 | #73 |
Re: Вопросы по C#
Eще вариант - сделать статический класс который будет содержать message.
в мультипоточном таймере запрос будет проставлять значение message, а в форме запускаешь еще один таймер. обычный который будет периодически читать значение message из статического класса и совать его в нужный контрол. инвок тогда не понадобится. но тут опять могут возникнуть тормоза если интервал будет маленьким. |
|
04.08.2012, 22:16 | #74 |
Новичок
Пол: Регистрация: 29.12.2007
Сообщений: 22
Репутация: 2
|
Re: Вопросы по C#
Тоесть ты имеешь ввиду отельно создать ссылку, а дальше ее применять в разных потоках?
|
05.08.2012, 05:38 | #75 |
Re: Вопросы по C#
Да, типа буфера обмена. Я правда мел ввиду статический класс для которого не нужно будет создавать экземпляр, но можно и обычный.
Код:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsApplication1 { public partial class Form1 : Form { private static System.Threading.Timer timer; // обеспечивает каждые тик в отдельном потоке private Timer timer2; private static bool isBussy = false; public Form1() { InitializeComponent(); RunTimer(1000); timer2 = new Timer { Interval = 5000 }; timer2.Tick +=new EventHandler((sender, e) => { lock (Buffer.Message) { tbMessage.Text = Buffer.Message; } }); timer2.Start(); } /// <summary> /// Starts timer /// </summary> /// <param name="period">timer work period(miliseconds)</param> public void RunTimer(int period) { if (timer == null) timer = new System.Threading.Timer(new System.Threading.TimerCallback(timer_OnCallBack)); timer.Change(0, period); } private void timer_OnCallBack(object state) { if (isBussy) return; isBussy = true; try { //using (MySqlConnection myConnection = new MySqlConnection(myConnectionString)) { //using (MySqlCommand myCommand = new MySqlCommand(CommandText, myConnection)) { //myConnection.Open(); lock (Buffer.Message) { Buffer.Message = DateTime.Now.ToString(); } //string s = myCommand.ExecuteScalar().ToString(); //lock (Buffer.Message) //{ // Buffer.Message = s; //} } } } catch (Exception ex) { //MessageBox.Show("Ошибка: " + ex.Message); } finally { isBussy = false; } } } public static class Buffer { public static string Message { get; set; } } } Последний раз редактировалось Svintuss; 05.08.2012 в 06:04.. |
|
Сказали спасибо: |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопросы | TOPGAN | Скорая помощь | 4 | 14.09.2009 18:25 |
Вопросы по Win Api :-)) | frostmourne | Скорая помощь | 15 | 27.02.2009 17:26 |
|
|