2013-03-02 7 views
-3

Je souhaite utiliser une variable partagée entre deux projets différents et je souhaite la mettre à jour à chaque fois dans C#? J'ai utilisé le fichier dll pour partager un variable, mais cela n'a pas fonctionné lors de la mise à jour de la variable. aidez s'il vous plaît.Comment partager une variable entre deux projets C#

public static class Signals 
{ 
public static bool Admin_Logged_In; 
public static bool get_Admin_Flag() 
{ 
    return Admin_Logged_In; 
} 
public static bool get_Busy_Flag() 
{ 
    return Back_End_Busy; 
} 
} 

i ci-dessus classe dans attachais fichier DLL et dans deux projets refered différents & puis essayez de mettre à jour la valeur dans un projet & attendant d'obtenir la valeur mise à jour dans le deuxième projet. mais il ne fournit pas de valeur mise à jour.

+3

Pouvez-vous partager du code? –

+0

Pourquoi utiliser une variable? que diriez-vous de fichier? ou base de données. –

+0

Je mets fréquemment à jour cette variable, donc j'ai pensé à une seule variable pourquoi ouvrir et fermer un fichier à chaque fois. –

Répondre

-1

qu'en est-il des fichiers liés (cliquez sur projet -> ajouter -> élément existant -> (sélectionnez vous.cs) -> ajouter comme lien)?

+0

J'ai aussi essayé que .. :( –

+0

Cela ne fonctionnera pas – nvoigt

0

Vous essayez d'accéder au membre statique par deux projets dans le même programme droit? Pas deux programmes distincts.

Si oui, je pense que le malentendu que vous avez est entre les types de valeur et les types de référence. Vous pouvez mettre à jour la variable partagée des deux projets, mais ces valeurs ne seront pas propagées. Je vais utiliser une seule classe pour démontrer, plutôt que les deux que vous utilisez.

static class Test 
{ 
    public static bool logged_in; 
} 


Test.logged_in = true; 
var t = Test.logged_in; 
Console.WriteLine(l); // prints true 
Test.logged_in = false; 
var f = Test.logged_in; 
Console.WriteLine(f); // prints false 
Console.WriteLine(t); // prints true 

Remarquez comment n'a pas été mis à jour la valeur de t lorsque vous avez modifié le membre statique? C'est parce que bool est un type de valeur, pas un type de référence. Ainsi, lorsque vous demandez la valeur, vous recevez une copie de la valeur, pas une référence à la variable.

Si l'organe statique était un type de référence bien, vous pouvez observer un comportement différent:

static class Test 
{ 
    public static string logged_in; 
} 


Test.logged_in = "true"; 
var t = Test.logged_in; 
Console.WriteLine(l); // prints "true" 
Test.logged_in = "false"; 
var f = Test.logged_in; 
Console.WriteLine(f); // prints "false" 
Console.WriteLine(t); // prints "false" 
+0

ce que votre dire est correct .. encore, il ne fonctionne pas .. –

+0

@ USER123, s'il vous plaît prendre une décision, avez-vous deux processus distincts comme dans votre question originale, ou non, selon ce commentaire? – nvoigt

+0

J'ai deux processus distincts (exe je veux dire) qui se réfèrent à un drapeau commun (u peut dire un sémaphore) –

3

Les états de documentation MS sur DLL: « Par défaut, chaque processus en utilisant une DLL a sa propre instance de tous les DLLs variables globales et statiques. ".

Jetez un oeil sur ce qui donne une solution de contournement: http://msdn.microsoft.com/en-us/library/h90dkhs0(v=vs.80).aspx

BTW, je partage ces valeurs en utilisant les communications réseau.

1

Si vous avez deux processus (comme deux fichiers .exe) qui doivent communiquer, cela s'appelle inter process communication. Il n'y a vraiment pas de moyen facile d'expliquer, car il existe un million de façons différentes de gérer cela.

  • Vous pouvez écrire dans des fichiers et les lire.
  • Vous pouvez connecter les processus par réseau.
  • Vous pouvez écrire et lire dans une base de données commune.
  • Vous pouvez utiliser les files d'attente de messages.
  • Vous pouvez utiliser des canaux nommés.
  • Et probablement une autre douzaine de façons j'ai raté ...

Vous aurez besoin de les Reasearch et trouver une solution qui correspond le mieux à votre problème.

Questions connexes