Вы можете использовать 2 способа: int? или Nullable, оба имеют одинаковое поведение. Вы можете сделать микс без проблем, но лучше сделать код максимально чистым.
Вариант 1 (с?):
private void Example(int? arg1, int? arg2)
{
if (arg1.HasValue)
{
//do something
}
if (arg1.HasValue)
{
//do something else
}
}
Вариант 2 (с нулевым значением):
private void Example(Nullable arg1, Nullable arg2)
{
if (arg1.HasValue)
{
//do something
}
if (arg1.HasValue)
{
//do something else
}
}
В C # 4.0 появился новый способ сделать то же самое с большей гибкостью в этом случае платформа предлагает необязательные параметры со значениями по умолчанию , таким образом, вы можете установить значение по умолчанию, если метод вызывается без всех параметров.
Вариант 3 (со значениями по умолчанию)
private void Example(int arg1 = 0, int arg2 = 1)
{
//do something else
}
Вы также можете узнать о вызовах AJAX.
Рассмотрите возможность использования этого:
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
string url = e.Url.ToString();
if (!(url.StartsWith("http://") || url.StartsWith("https://")))
{
// in AJAX
}
if (e.Url.AbsolutePath != this.webBrowser.Url.AbsolutePath)
{
// IFRAME
}
else
{
// REAL DOCUMENT COMPLETE
}
}
Мне пришлось сделать нечто подобное. Что я делаю, так это напрямую использую ShDocVw (добавляя ссылку на все необходимые сборки взаимодействия в мой проект). Затем я добавляю не элемент управления WebBrowser в свою форму, а элемент управления AXShDocVw.AxWebBrowser .
Для перехода и ожидания я использую следующий метод:
private void GotoUrlAndWait(AxWebBrowser wb, string url)
{
object dummy = null;
wb.Navigate(url, ref dummy, ref dummy, ref dummy, ref dummy);
// Wait for the control the be initialized and ready.
while (wb.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE)
Application.DoEvents();
}
Мне еще предстоит найти рабочее решение этой проблемы в Интернете. Надеюсь, это выйдет на вершину и сэкономит всем месяцы настройки, которые я потратил, пытаясь решить эту проблему, и связанные с этим крайние случаи. Я боролся с этой проблемой на протяжении многих лет, поскольку Microsoft изменила реализацию / надежность isBusy и document.readystate. В IE8 мне пришлось прибегнуть к следующему решению. Это похоже на вопрос / ответ Маргуса, за некоторыми исключениями. Мой код будет обрабатывать вложенные фреймы, запросы javascript / ajax и мета-перенаправления. Я упростил код для ясности, но я также использую функцию тайм-аута (не входит в комплект) для сброса веб-страницы через 5 минут, если domAccess все еще равен false.
private void m_WebBrowser_BeforeNavigate(object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
{
//Javascript Events Trigger a Before Navigate Twice, but the first event
//will contain javascript: in the URL so we can ignore it.
if (!URL.ToString().ToUpper().StartsWith("JAVASCRIPT:"))
{
//indicate the dom is not available
this.domAccess = false;
this.activeRequests.Add(URL);
}
}
private void m_WebBrowser_DocumentComplete(object pDisp, ref object URL)
{
this.activeRequests.RemoveAt(0);
//if pDisp Matches the main activex instance then we are done.
if (pDisp.Equals((SHDocVw.WebBrowser)m_WebBrowser.ActiveXInstance))
{
//Top Window has finished rendering
//Since it will always render last, clear the active requests.
//This solves Meta Redirects causing out of sync request counts
this.activeRequests.Clear();
}
else if (m_WebBrowser.Document != null)
{
//Some iframe completed dom render
}
//Record the final complete URL for reference
if (this.activeRequests.Count == 0)
{
//Finished downloading page - dom access ready
this.domAccess = true;
}
}