【发布时间】:2011-09-06 03:30:19
【问题描述】:
好的,所以我有两个程序。代码在最后。
一个是 gmail 通知器,它通过串行输出未读邮件的数量,例如:<02,> 等。
然后我有一个程序可以获取系统(pc)临时并将它们输出到串行也像:<30,42,50,> 等
它们都以不同的时间间隔(每次使用不同的值)输出相同的数据和相同的格式(<XX,>)。所以邮件一每5分钟检查一次邮件,然后输出到序列邮件的数量。但是临时程序以 1 秒的速度以更快的速度通过串行输出数据。
我一直在尝试将这两个程序合二为一,使其输出如下:<02,30,42,50,> 并每秒发送一次,以便临时更新。所以最后三组数字每秒改变一次,但第一组不会每 5 分钟改变一次,但 02 仍然包含在输出中,因为它(输出)每次都需要相同的长度/组织等。
那你们怎么看?最好的方法是什么?
我尝试将除static void Main 之外的所有 GMAIL 代码(所有 Main 在 gmail 程序中所做的就是调用 get mail 并将数据写入串行)到 TEMPS 程序,然后调用 getmail Unreadz = CheckMail(); 其中临时程序正在写入串行(在新的组合代码中),但这会停止向串行写入数据,以便它可以检查邮件,这有点慢,所以它不会写入整个<02,30,42,50,>,直到邮件完成检查。我的尝试:
reader.ReadToFollowing("value");
port.Write(reader.ReadElementContentAsString() + ",");
Unreadz = CheckMail();
if (Convert.ToInt32(Unreadz) < 10) port.Write("0" + Unreadz + ",");
else port.Write("" + Unreadz + ",");
谢谢。
GMAIL:
namespace GmailNotifier
{
class Gmail
{
public static void Main(string[] args)
{
try
{
SerialPort port = new SerialPort( "COM2", 9600, Parity.None, 8, StopBits.One );
port.Open();
string Unreadz = "0";
while ( true )
{
Unreadz = CheckMail();
port.Write("<");
Console.WriteLine("Unread Mails: " + Unreadz);
if (Convert.ToInt32(Unreadz) < 10) port.Write("0" + Unreadz + ",");
else port.Write("" + Unreadz + ",");
port.Write(">");
System.Threading.Thread.Sleep(1000);
}
} catch ( Exception ee ) { Console.WriteLine( ee.Message ); }
}
public static string TextToBase64( string sAscii )
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
byte[] bytes = encoding.GetBytes( sAscii );
return System.Convert.ToBase64String( bytes, 0, bytes.Length );
}
public static string CheckMail()
{
string result = "0";
try
{
var url = @"hsttps://gmail.google.com/gmail/feed/atom";
var USER = <uname>;
var PASS = <password>;
var encoded = TextToBase64( USER + ":" + PASS );
var myWebRequest = HttpWebRequest.Create( url );
myWebRequest.Method = "POST";
myWebRequest.ContentLength = 0;
myWebRequest.Headers.Add( "Authorization", "Basic " + encoded );
var response = myWebRequest.GetResponse();
var stream = response.GetResponseStream();
XmlReader reader = XmlReader.Create( stream );
while ( reader.Read())
if ( reader.NodeType == XmlNodeType.Element )
if ( reader.Name == "fullcount" )
{
result = reader.ReadElementContentAsString();
return result;
}
} catch ( Exception ee ) { Console.WriteLine( ee.Message ); }
return result;
}
}
}
温度:
namespace AIDA64_Reader_SerailOut
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Reading AIDA64 Shared Memory and Sending to Serial");
try
{
SerialPort port = new SerialPort("COM2", 9600, Parity.None, 8, StopBits.One);
port.Open();
while (true)
using (var file = MemoryMappedFile.OpenExisting("AIDA64_SensorValues"))
{
using (var readerz = file.CreateViewAccessor(0, 0))
{
var bytes = new byte[195];
var encoding = Encoding.ASCII;
readerz.ReadArray<byte>(0, bytes, 0, bytes.Length);
//File.WriteAllText("C:\\myFile.txt", encoding.GetString(bytes));
StringReader stringz = new StringReader(encoding.GetString(bytes));
port.Write("<");
var readerSettings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment };
using (var reader = XmlReader.Create(stringz, readerSettings))
{
while (reader.Read())
{
using (var fragmentReader = reader.ReadSubtree())
{
if (fragmentReader.Read())
{
reader.ReadToFollowing("value");
//port.Write("<");
port.Write(reader.ReadElementContentAsString() + ",");
//port.Write(">");
}
}
}
}
port.Write(">");
}
System.Threading.Thread.Sleep(1000);
}
}
catch (Exception ee) { Console.WriteLine(ee.Message); }
Console.WriteLine("Done");
Console.ReadLine();
}
}
}
【问题讨论】:
-
您现在可能想更改您的 gmail 帐户的密码 - 因为即使您将其编辑掉,这也会出现在 SO 的历史记录中。如果不是您真正的 gmail 用户名/密码,请忽略此 PSA。 :)
-
无论如何,它都应该被隐藏起来。任何方式都编辑了帖子。
-
它不是我真正的,所以一切都很好。
标签: c# serial-port