[英]C# enabling menu item
關於下載文件,我有一條try-catch語句。 下載文件后,我將啟用我的菜單項之一,然后關閉計時器設置,以在一分鍾內重試下載。
我的問題是由於某種原因我的trafficManagementToolStripMenuItem.Enabled = true;
即使啟用了菜單項,該行仍在激活catch語句。 該文件正確下載,當我注釋掉該行時,它可以正常運行。 但是每次運行它時,都會出現“錯誤”消息框,即使下載完成后菜單項已正確啟用,計時器也不會被禁用。
有任何想法嗎?
try
{
////downloads Data
string address = "http://website.file.txt";
string filename = "vsd.txt";
WebClient client = new WebClient();
client.DownloadFile(address, filename);
trafficManagementToolStripMenuItem.Enabled = true;
timer1.Enabled = false;
}
catch
{
timer1.Enabled = true;
MessageBox.Show("error", "test");
}
您沒有說什么例外,但是我猜您正在后台線程中運行下載例程,對嗎? 您只能從創建控件的線程(主UI線程)訪問控件。 從后台線程訪問諸如ToolStripMenuItem之類的控件將導致異常。
如果是這種情況,請使用Control.Invoke或Control.BeginInvoke方法在ToolStripMenuItem的線程上運行.Enabled = true
調用。 為此,您需要一個控件(不幸的是ToolStripMenuItem只是一個組件)。 我假設您可以從某處獲得對包含Form的引用。 現在,您可以編寫以下代碼:
Action enableAction = delegate() { trafficManagementToolStripMenuItem.Enabled = true; }
form.BeginInvoke(enableAction);
這將導致enableAction
到正確的UI線程上運行form
。
改變你的收獲
catch (Exception ex)
{
timer1.Enabled = true;
MessageBox.Show("error", ex.Message);
}
這至少會給您實際的錯誤信息。
我猜是因為您沒有在UI線程中運行,而需要使用Control.Invoke,請看一下http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control。 msdn上的invokerequired.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.