TORONTO -- Josh Towers knows he's been bad. Still, the Toronto right-hander was shocked and disappointed he was pulled after just four innings.
Crosby and Melhuse homered in the fourth off Towers, who has lost all seven of his starts this season.
Toronto manager John Gibbons didn't allow Towers (0-7) to come out for the fifth after he allowed three runs in four innings.
"I'm shocked. Print that," Towers said. "I realize what's been going on. The one inning has been getting me a little bit, but today was different."
Towers thought he had his best stuff of the season.
"Three runs ain't going to beat you, not in this league," he said. "If I go to the bullpen, oh well. It's just about figuring how to get the ball back down and into the corners, which I thought I did a good job of today."
Gibbons said he pulled him because the bullpen needed work and Towers has struggled.
"He gave up those runs. He fell behind. I decided to make a change," said Gibbons, who couldn't explain Towers' struggles. "I wish I could. There's no place to hide. Baseball can be a cruel game some times, most of the time."
Towers, whose ERA fell from 10.59 to 10.09, won 13 games last season and signed a two-year contract in the offseason. He has lost a career-worst seven straight decisions.
He did rebound last season after losing six straight decisions.
Gibbons didn't like being asked if he would stay in the rotation.
"The blood hasn't even dried. Not a good time to ask that 10 minutes after the game," Gibbons said.
Oakland starter Dan Haren (2-3) looked sharp, allowing three runs and six hits in 7 1/3 innings. He struck out seven and walked two.
"I was able to throw everything for strikes which is key against a lineup like that," Haren said.
Haren felt for Towers, but wasn't surprised he was pulled.
"I've seen that he struggled this year. I know how it feels. Sometimes baseball can beat you up," Haren said.
Toronto put two runners on in the eighth, but Kiko Calero struck out Shea Hillenbrand on three pitches for the second out of the inning. Huston Street came on and got four outs for his fifth save in six chances despite allowing RBIs doubles to Reed Johnson and Vernon Wells in the ninth. Troy Glaus popped out to second base to end the game.
Towers looked sharp in the first three innings before Crosby led off the fourth by crushing a ball over the center field wall for Oakland's first run.
Towers later walked Jay Payton with two outs in the inning before Melhuse hit a towering homer to right center to give Oakland a 3-0 lead.
"He made one mistake to me and I hit it out and then he made a mistake to Melhuse, but to me he looked pretty good," Crosby said. "I don't know why they took him out so early, but it's not my call."
Oakland added two unearned runs in the sixth after Toronto third baseman Glaus' fielding error allowed Oakland to load the bases and Mark Kotsay followed with a two-run single off Dustin McGowan.
Haren took a one-hit shutout into the seventh before Hillenbrand singled and Gregg Zaun hit a two-run homer.
After Aaron Hill tripled in the inning, Johnson hit an RBI single to cut Oakland's lead to 5-3.
But Toronto shortstop Russ Adams committed his fourth error in three days in the eighth, allowing Payton to score Oakland's sixth run after he threw wildly to first on what should have been a double play.
"That was costly. He's got to make those plays for us," said Gibbons, who added he might give Adams a day off in the next couple of days to ease his mind.
Oakland 3B Eric Chavez was a late scratch due to illness. Antonio Perez replaced him in the lineup. Chavez is 11-for-21 (.524) with three home runs and seven RBIs in his career against Towers. ... Johnson ended an 0-for-12 slump with his single in the seventh. ... Towers lost six straight decisions from May 22-June 24 last season.