Pergunta

Eu tenho duas funções que eu quero correr em diferentes tópicos (porque eles são coisas de banco de dados, e eles não são necessários imediatamente).

As funções são:

            getTenantReciept_UnitTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_Unit);
            getTenantReciept_TenantNameTableAdapter1.Fill(rentalEaseDataSet1.GetTenantReciept_TenantName);

Em javascript, eu sei que posso criar criar uma função anônima e chamá-lo em um novo segmento com bastante facilidade com algo parecido com isto:

setTimeout(new function(){doSomethingImportantInBackground();}, 500);

Existe algo parecido com isso em C #?

Foi útil?

Solução

A sua pergunta não é muito clara, eu tenho medo. Você pode facilmente iniciar um novo tópico com algum código, usando métodos anônimos em C # 2 e expressões lambda em C # 3:

método anônimo:

new Thread(delegate() {
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit);
}).Start();
new Thread(delegate() {
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName);
}).Start();

expressão Lambda:

new Thread(() =>
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit)
).Start();
new Thread(() =>
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName)
).Start();

Você pode usar o mesmo tipo de sintaxe para Control.Invoke, mas é um pouco mais complicado, como que pode levar qualquer delegado - então você precisa dizer ao compilador que tipo você está usando, em vez de contar com um conversão implícita. É provavelmente mais fácil de escrever:

EventHandler eh = delegate
{
    // Code
};
control.Invoke(eh);

ou

EventHandler eh = (sender, args) =>
{
    // Code
};
control.Invoke(eh);

Como uma nota lateral, são os seus nomes realmente tanto tempo? você pode encurtar-los para obter o código mais legível?

Outras dicas

À semelhança do que tem sido dito - Acho tarefas a ser um pouco mais simples (suportado a partir do .net 4 e pode ser usado como segue em net 4,5 ):.

Task mytask = Task.Run(() => 
{
    //Lines of code
});

A partir de tópicos é relativamente caro.

Você pode ser melhor do usando um thread do pool de threads:

ThreadPool.QueueUserWorkItem(unused =>
    getTenantReciept_UnitTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_Unit)
);
ThreadPool.QueueUserWorkItem(unused =>
    getTenantReciept_TenantNameTableAdapter1.Fill(
        rentalEaseDataSet1.GetTenantReciept_TenantName)
);

Você pode usar um método anônimo:


void Foo()
{
    Thread myThread = new System.Threading.Thread(delegate(){
              //Your code here
     });
    myThread.Start();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top