如何在c#中调用此方法?

如何在c#中调用此方法?,c#,datagrid,C#,Datagrid,如何从其他地方调用此方法 private void AssortDatagrid_LoadRows(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e) { if (ValidTill.SelectedIndex >= 0) { DataRowView rowContext = e.Row.DataContext as DataRowView; string i

如何从其他地方调用此方法

private void AssortDatagrid_LoadRows(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
{

    if (ValidTill.SelectedIndex >= 0)
    {
        DataRowView rowContext = e.Row.DataContext as DataRowView;

        string item = rowContext.Row["Срок годности"].ToString();
        DateTime date;
        if ((DateTime.TryParseExact(item, "dd'.'MM'.'yyyy",
                                   CultureInfo.InvariantCulture,
                                   DateTimeStyles.None,
                                   out date)) && (rowContext != null))
        {
            if (date.Date <= dt.Date)
            {
                try
                {

                    e.Row.Background = new BrushConverter().ConvertFromString(rowColor) as SolidColorBrush;

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
        }
        else // когда не может парсировать дату
        {

        }

    }


}
可以叫它吗?
让我解释一下我在做什么。我想在加载行时调用popup,在popup中,我有一个圆形的进度条作为gif动画。我正在更改那些有效日期即将到来的项目的行背景。

事件处理程序没有使其不可调用的限制。它们与任何其他方法组具有相同的可访问性修饰符和调用规则。因此,您可以像调用任何其他方法一样调用处理程序,可以选择使用非空值传递参数:

schoddatagrid\u LoadRows(null,null)

更新
收到您的评论后:

“调用线程无法访问此对象,因为另一个 线程拥有它。”

这似乎是一个调用问题…实际上看起来是一个WPF调用

在这种情况下,类似于

this.Dispatcher.Invoke(新操作(()=>schodDataGrid_LoadRows(null,null))


虽然这应该可以解决错误…Servy的观点很好。这类工作可以从UI线程中卸载。将其推到一个。我离题了…我们将与原始问题相切。

事件处理程序没有使其不可调用的限制。它们具有相同的可访问性修饰符和调用规则les作为任何其他方法组。因此,您可以像任何其他方法一样调用处理程序,可以选择使用非空值传递参数:

schoddatagrid\u LoadRows(null,null);

更新
收到您的评论后:

“调用线程无法访问此对象,因为另一个 线程拥有它。”

这似乎是一个调用问题…实际上看起来是一个WPF调用

在这种情况下,类似于

this.Dispatcher.Invoke(新操作(()=>schodDataGrid_LoadRows(null,null))



虽然这可以解决错误…Servy提出了一个很好的观点。这种类型的工作可以从UI线程中卸载。把它推到一个。我离题了…我们将与原始问题相切。

您可以像任何其他方法一样调用事件处理程序,但更好的方法是重构代码并提取ev的内容将ent处理程序作为普通方法调用(带有必需的参数)。然后在两个位置(事件处理程序和要调用事件处理程序的第二个位置)调用该方法。

您可以像调用任何其他方法一样调用事件处理程序,但更好的方法是将代码重构,并将事件处理程序的内容提取为普通方法(使用必需的参数)。然后在两个位置(事件处理程序和要调用事件处理程序的第二个位置)调用该方法。

是“另一个位置”是否在同一类定义中?调用方/调用方方法所在的类结构看起来像什么?该方法看起来像一个事件处理程序-您将希望附加一个要由该方法处理的事件。您试图做什么?不要在工作线程中触摸UI控件。您必须在UI线程中调用它。是吗“另一个地方”是否在同一个类定义中?调用方/调用方方法所在的类结构看起来像什么?该方法看起来像一个事件处理程序-您将希望附加一个要由该方法处理的事件。您试图做什么?不要在工作线程中触碰UI控件。您必须在UI线程中调用它。它给了我这个错误,调用线程无法访问这个对象,因为另一个线程拥有它。@FirdavsKurbonov这是一个完全不同的问题,与问题无关,因为你现在正在从
workForce\u DoWork
方法调用
schorddatagrid\u LoadRows
。至于你的编辑,在上下文中,他几乎肯定应该必须在BGW的另一个事件中而不是在DoWork事件中执行工作,而不是使用
Invoke
@FirdavsKurbonov我修复了他的编译器错误,但在任何情况下,正如我所说,在这种情况下,这都不是正确的途径。它给了我这个错误调用线程无法访问此对象,因为另一个线程是的。@FirdavsKurbonov,这是一个完全不同的问题,与问题无关,因为您现在正在从
workForce\u DoWork
方法调用
SockDataGrid\u LoadRows
。至于您的编辑,在上下文中,他几乎可以肯定只是在BGW的另一个事件中进行工作,而不是在DoWork事件中比使用
Invoke
@FirdavsKurbonov我修复了他的编译器错误,但无论如何,正如我所说,在这种情况下,这不是合适的途径。
“你可以像调用任何其他方法一样调用事件处理程序”
好的,它们是方法。作为方法,它们并不比其他任何方法更特殊;它们只是碰巧有一个与某个特定事件匹配的签名。这里的想法是将常规方法附加到事件上,而不是像方法一样使用事件处理程序。@Servy是的,但通常创建事件hadnler只是为了处理事件,然后编写在其中添加一些代码,然后您意识到您还需要从其他地方调用该方法。但是您的方法的签名使其不合适(或难看)手动调用。是的,我个人将其归因于MS框架中事件的糟糕设计;当签名实际上并不合适时,他们使用签名,这是非常令人恼火的。在任何情况下,我发现实际使用的参数非常少,因此仅传入
null
值通常是可以接受的,但我并不反对您建议的重新分解。通常,我会完全跳过命名的事件处理程序,使用lambda作为事件处理程序,调用实际使用的参数的实际方法。
“您可以像调用任何其他方法一样调用事件处理程序”private void workForce_DoWork(object sender, DoWorkEventArgs e)
{
   AssortDatagrid_LoadRows(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
}